diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-08 16:26:33 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-08 16:26:33 +0200 |
| commit | cb27ac8d933f2e4cd81bdf67d0bf4ee70e3dcdd2 (patch) | |
| tree | 5524321cb9db0c25f9571f21fe508bbd7bfc57c6 /src | |
| parent | 035c77ad91dbbd8d463184629b9695db4ff8dc88 (diff) | |
| download | box64-cb27ac8d933f2e4cd81bdf67d0bf4ee70e3dcdd2.tar.gz box64-cb27ac8d933f2e4cd81bdf67d0bf4ee70e3dcdd2.zip | |
Fixed memory protection that wasn't updated correctly
Diffstat (limited to 'src')
| -rw-r--r-- | src/custommem.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/custommem.c b/src/custommem.c index 80453230..634b849b 100644 --- a/src/custommem.c +++ b/src/custommem.c @@ -678,7 +678,7 @@ void protectDB(uintptr_t addr, uintptr_t size) 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)) - mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_WRITE); + mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~(PROT_WRITE|PROT_CUSTOM)); } pthread_mutex_unlock(&mutex_prot); } @@ -702,7 +702,7 @@ void protectDBnolock(uintptr_t addr, uintptr_t size) 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)) - mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_WRITE); + mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~(PROT_WRITE|PROT_CUSTOM)); } } @@ -736,7 +736,7 @@ void unprotectDB(uintptr_t addr, uintptr_t size) uint8_t prot = kh_value(memprot, k)[ii]; kh_value(memprot, k)[ii] = prot&~PROT_DYNAREC; if(prot&PROT_DYNAREC) { - mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_DYNAREC); + mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_CUSTOM); cleanDBFromAddressRange((i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, 0); } } @@ -762,7 +762,7 @@ void updateProtection(uintptr_t addr, uintptr_t size, uint32_t prot) const uintptr_t ii = i&(MEMPROT_SIZE-1); uint32_t dyn = kh_value(memprot, k)[ii]&PROT_DYNAREC; if(dyn && (prot&PROT_WRITE)) // need to remove the write protection from this block - mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_DYNAREC); + mprotect((void*)(i<<MEMPROT_SHIFT), 1<<MEMPROT_SHIFT, prot&~PROT_CUSTOM); kh_value(memprot, k)[ii] = prot|dyn|PROT_ALLOC; } pthread_mutex_unlock(&mutex_prot); |