From e68e4dbb7529295dc4fde320689f80b1215a0419 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 18 Sep 2024 11:59:22 +1000 Subject: [PATCH] Updated ntdll-WRITECOPY patchset These patches aren't in the correct directory and are really never going to be accepted upstream. So until upstream fixes the WRITE stuff, these might have to stay awhile. Battle.net requires these patches to function. --- ...ct-return-value-in-VirtualProtect-fo.patch | 28 +++++++++++++++++ ...e-NULL-old_prot-parameter-in-Virtual.patch | 30 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 patches/ntdll-WRITECOPY/0010-kernelbase-Correct-return-value-in-VirtualProtect-fo.patch create mode 100644 patches/ntdll-WRITECOPY/0011-kernelbase-Handle-NULL-old_prot-parameter-in-Virtual.patch diff --git a/patches/ntdll-WRITECOPY/0010-kernelbase-Correct-return-value-in-VirtualProtect-fo.patch b/patches/ntdll-WRITECOPY/0010-kernelbase-Correct-return-value-in-VirtualProtect-fo.patch new file mode 100644 index 00000000..6126e4fb --- /dev/null +++ b/patches/ntdll-WRITECOPY/0010-kernelbase-Correct-return-value-in-VirtualProtect-fo.patch @@ -0,0 +1,28 @@ +From 321e3228c6c28256bfb209efdc372b61f9c8535f Mon Sep 17 00:00:00 2001 +From: Fabian Maurer +Date: Thu, 21 Dec 2023 20:09:23 +0100 +Subject: [PATCH] kernelbase: Correct return value in VirtualProtect for + PAGE_WRITECOPY + +--- + dlls/kernelbase/memory.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c +index 4f4bba9a13b..de42395b33b 100644 +--- a/dlls/kernelbase/memory.c ++++ b/dlls/kernelbase/memory.c +@@ -481,7 +481,9 @@ BOOL WINAPI DECLSPEC_HOTPATCH VirtualLock( void *addr, SIZE_T size ) + */ + BOOL WINAPI DECLSPEC_HOTPATCH VirtualProtect( void *addr, SIZE_T size, DWORD new_prot, DWORD *old_prot ) + { +- return VirtualProtectEx( GetCurrentProcess(), addr, size, new_prot, old_prot ); ++ BOOL ret = VirtualProtectEx( GetCurrentProcess(), addr, size, new_prot, old_prot ); ++ if (*old_prot == PAGE_WRITECOPY) *old_prot = PAGE_READWRITE; ++ return ret; + } + + +-- +2.43.0 + diff --git a/patches/ntdll-WRITECOPY/0011-kernelbase-Handle-NULL-old_prot-parameter-in-Virtual.patch b/patches/ntdll-WRITECOPY/0011-kernelbase-Handle-NULL-old_prot-parameter-in-Virtual.patch new file mode 100644 index 00000000..e8f0e300 --- /dev/null +++ b/patches/ntdll-WRITECOPY/0011-kernelbase-Handle-NULL-old_prot-parameter-in-Virtual.patch @@ -0,0 +1,30 @@ +From d455916aec7649a816deb36c303341a6c7732a97 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Aida=20Jonikien=C4=97?= +Date: Fri, 26 Jul 2024 20:33:57 +0300 +Subject: [PATCH] kernelbase: Handle NULL old_prot parameter in + VirtualProtect(). + +This fixes a segfault when launching any game with the EA Desktop application. + +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56694 +Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=56711 +--- + dlls/kernelbase/memory.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c +index 2b0e674bb9b..d1408cf4c0e 100644 +--- a/dlls/kernelbase/memory.c ++++ b/dlls/kernelbase/memory.c +@@ -548,7 +548,7 @@ BOOL WINAPI DECLSPEC_HOTPATCH VirtualLock( void *addr, SIZE_T size ) + BOOL WINAPI DECLSPEC_HOTPATCH VirtualProtect( void *addr, SIZE_T size, DWORD new_prot, DWORD *old_prot ) + { + BOOL ret = VirtualProtectEx( GetCurrentProcess(), addr, size, new_prot, old_prot ); +- if (*old_prot == PAGE_WRITECOPY) *old_prot = PAGE_READWRITE; ++ if (old_prot && *old_prot == PAGE_WRITECOPY) *old_prot = PAGE_READWRITE; + return ret; + } + +-- +2.43.0 +