Commit 9476071f authored by Michael Karcher's avatar Michael Karcher Committed by Alexandre Julliard

ntdll: Don't send EXCEPTION_EXECUTE_FAULT to Windows programs that didn't enable DEP.

parent 7aa1f6c3
...@@ -1833,6 +1833,15 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext ) ...@@ -1833,6 +1833,15 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
rec->ExceptionCode = EXCEPTION_ACCESS_VIOLATION; rec->ExceptionCode = EXCEPTION_ACCESS_VIOLATION;
rec->NumberParameters = 2; rec->NumberParameters = 2;
rec->ExceptionInformation[0] = (get_error_code(context) >> 1) & 0x09; rec->ExceptionInformation[0] = (get_error_code(context) >> 1) & 0x09;
/* Send code 8 (EXCEPTION_EXECUTE_FAULT) only if data execution
prevention is enabled */
if (rec->ExceptionInformation[0] & 8)
{
ULONG flags;
NtQueryInformationProcess( GetCurrentProcess(), ProcessExecuteFlags,
&flags, sizeof(flags), NULL );
if (!(flags & MEM_EXECUTE_OPTION_DISABLE)) rec->ExceptionInformation[0] &= 1;
}
rec->ExceptionInformation[1] = (ULONG_PTR)siginfo->si_addr; rec->ExceptionInformation[1] = (ULONG_PTR)siginfo->si_addr;
break; break;
case TRAP_x86_ALIGNFLT: /* Alignment check exception */ case TRAP_x86_ALIGNFLT: /* Alignment check exception */
......
...@@ -1053,11 +1053,7 @@ static void test_dpe_exceptions(void) ...@@ -1053,11 +1053,7 @@ static void test_dpe_exceptions(void)
info.exception_caught = FALSE; info.exception_caught = FALSE;
run_exception_test(dpe_exception_handler, &info, single_ret, sizeof(single_ret), PAGE_NOACCESS); run_exception_test(dpe_exception_handler, &info, single_ret, sizeof(single_ret), PAGE_NOACCESS);
ok(info.exception_caught == TRUE, "Execution of disabled memory suceeded\n"); ok(info.exception_caught == TRUE, "Execution of disabled memory suceeded\n");
if(has_hw_support) ok(info.exception_info == EXCEPTION_READ_FAULT,
todo_wine ok(info.exception_info == EXCEPTION_READ_FAULT,
"Access violation type: %08x\n", (unsigned)info.exception_info);
else
ok(info.exception_info == EXCEPTION_READ_FAULT,
"Access violation type: %08x\n", (unsigned)info.exception_info); "Access violation type: %08x\n", (unsigned)info.exception_info);
} }
else else
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment