Huw Davies : ntdll/tests: Skip the map protect tests if we can' t disable no-exec.

Alexandre Julliard julliard at winehq.org
Mon Jul 9 16:00:33 CDT 2018


Module: wine
Branch: master
Commit: 986d5a9958ee767ee3c358fe676dde95dc0a3279
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=986d5a9958ee767ee3c358fe676dde95dc0a3279

Author: Huw Davies <huw at codeweavers.com>
Date:   Mon Jul  9 11:12:56 2018 +0100

ntdll/tests: Skip the map protect tests if we can't disable no-exec.

Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ntdll/tests/info.c | 32 +++++++++++++++++++++-----------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
index 4a2d9e6..7d60b94 100644
--- a/dlls/ntdll/tests/info.c
+++ b/dlls/ntdll/tests/info.c
@@ -1776,20 +1776,30 @@ static void test_mapprotection(void)
     NTSTATUS status;
     SIZE_T retlen, count;
     void (*f)(void);
+    BOOL reset_flags = FALSE;
 
-    if (!pNtClose) {
-        skip("No NtClose ... Win98\n");
-        return;
-    }
     /* Switch to being a noexec unaware process */
     status = pNtQueryInformationProcess( GetCurrentProcess(), ProcessExecuteFlags, &oldflags, sizeof (oldflags), &flagsize);
-    if (status == STATUS_INVALID_PARAMETER) {
-        skip("Invalid Parameter on ProcessExecuteFlags query?\n");
+    if (status == STATUS_INVALID_PARAMETER)
+    {
+        skip("Unable to query process execute flags on this platform\n");
         return;
     }
-    ok( (status == STATUS_SUCCESS) || (status == STATUS_INVALID_INFO_CLASS), "Expected STATUS_SUCCESS, got %08x\n", status);
-    status = pNtSetInformationProcess( GetCurrentProcess(), ProcessExecuteFlags, &flags, sizeof(flags) );
-    ok( (status == STATUS_SUCCESS) || (status == STATUS_INVALID_INFO_CLASS), "Expected STATUS_SUCCESS, got %08x\n", status);
+    ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status );
+    trace("Process execute flags %08x\n", oldflags);
+
+    if (oldflags & MEM_EXECUTE_OPTION_DISABLE)
+    {
+        if (oldflags & MEM_EXECUTE_OPTION_PERMANENT)
+        {
+            skip("Unable to turn off noexec\n");
+            return;
+        }
+
+        status = pNtSetInformationProcess( GetCurrentProcess(), ProcessExecuteFlags, &flags, sizeof(flags) );
+        ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status );
+        reset_flags = TRUE;
+    }
 
     size.u.LowPart  = 0x2000;
     size.u.HighPart = 0;
@@ -1832,8 +1842,8 @@ static void test_mapprotection(void)
     ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
     pNtClose (h);
 
-    /* Switch back */
-    pNtSetInformationProcess( GetCurrentProcess(), ProcessExecuteFlags, &oldflags, sizeof(oldflags) );
+    if (reset_flags)
+        pNtSetInformationProcess( GetCurrentProcess(), ProcessExecuteFlags, &oldflags, sizeof(oldflags) );
 }
 
 static void test_queryvirtualmemory(void)




More information about the wine-cvs mailing list