mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-09 16:31:28 +12:00
Implement vm::page_executable (#6330)
Fixes segfaults when attenpting to set segfaults on non-executable memory.
This commit is contained in:
parent
94d33003a3
commit
3ce18fd960
5 changed files with 15 additions and 17 deletions
|
@ -371,6 +371,7 @@ namespace vm
|
|||
|
||||
if (flags & page_executable)
|
||||
{
|
||||
// TODO
|
||||
utils::memory_commit(g_exec_addr + addr * 2, size * 2);
|
||||
}
|
||||
|
||||
|
@ -424,10 +425,12 @@ namespace vm
|
|||
|
||||
if (i < end)
|
||||
{
|
||||
g_pages[i].flags |= flags_set;
|
||||
g_pages[i].flags &= ~flags_clear;
|
||||
new_val = g_pages[i].flags;
|
||||
new_val |= flags_set;
|
||||
new_val &= ~flags_clear;
|
||||
|
||||
new_val = g_pages[i].flags & (page_readable | page_writable);
|
||||
g_pages[i].flags.release(new_val);
|
||||
new_val &= (page_readable | page_writable);
|
||||
}
|
||||
|
||||
if (new_val != start_value)
|
||||
|
@ -464,9 +467,14 @@ namespace vm
|
|||
break;
|
||||
}
|
||||
|
||||
if (g_pages[i].flags & page_executable)
|
||||
if (size == 0)
|
||||
{
|
||||
is_exec = true;
|
||||
is_exec = !!(g_pages[i].flags & page_executable);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Must be consistent
|
||||
verify(HERE), is_exec == !!(g_pages[i].flags & page_executable);
|
||||
}
|
||||
|
||||
size += 4096;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue