diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-07-10 17:42:20 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-07-10 17:42:20 +0200 |
| commit | f000951fc970708bfa0dd5d357a334b8cfc41eb0 (patch) | |
| tree | 071be15bfd617ecbae9a3917bfd6c21ebf4fa933 | |
| parent | edeac868d097f6954f3663db079721ae9003dd6c (diff) | |
| download | box64-f000951fc970708bfa0dd5d357a334b8cfc41eb0.tar.gz box64-f000951fc970708bfa0dd5d357a334b8cfc41eb0.zip | |
Fixed some issue with memory protection tracking
| -rw-r--r-- | src/custommem.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/custommem.c b/src/custommem.c index 8cd15f21..8424ea1b 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -708,11 +708,12 @@ void protectDBnolock(uintptr_t addr, uintptr_t size) } const uintptr_t ii = i&(MEMPROT_SIZE-1); uint8_t prot = kh_value(memprot, k)[ii]; - if(!prot) - prot = PROT_READ | PROT_WRITE; // comes from malloc & co, so should not be able to execute - kh_value(memprot, k)[ii] = prot|PROT_DYNAREC; - if(!(prot&PROT_DYNAREC)) + if(!(prot&PROT_DYNAREC)) { + if(!prot) + prot = PROT_READ | PROT_WRITE; // comes from malloc & co, so should not be able to execute + kh_value(memprot, k)[ii] = prot|PROT_DYNAREC; mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~(PROT_WRITE|PROT_CUSTOM)); + } } } @@ -751,8 +752,8 @@ void unprotectDB(uintptr_t addr, size_t size) } const uintptr_t ii = i&(MEMPROT_SIZE-1); uint8_t prot = kh_value(memprot, k)[ii]; - kh_value(memprot, k)[ii] = prot&~PROT_DYNAREC; if(prot&PROT_DYNAREC) { + kh_value(memprot, k)[ii] = prot&~PROT_DYNAREC; mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_CUSTOM); cleanDBFromAddressRange((i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, 0); } |