ntdll-WRITECOPY: Merge patches 4 and 7.

This commit is contained in:
Sebastian Lackner 2014-10-04 04:02:07 +02:00
parent e273769702
commit 35bcebd562
9 changed files with 24 additions and 45 deletions

View File

@ -757,11 +757,10 @@ ntdll-WRITECOPY.ok:
$(call APPLY_FILE,ntdll-WRITECOPY/0001-ntdll-Trigger-write-watches-before-passing-userdata-.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0002-advapi-Trigger-write-watches-before-passing-userdata.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0003-ntdll-Fix-handling-of-page-fault-if-a-guard-page-and.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0004-ntdll-Avoid-race-condition-if-two-threads-trigger-a-.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0005-ntdll-Wait-until-builtin-dlls-are-unloaded-before-re.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0006-ntdll-Setup-a-temporary-signal-handler-during-proces.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0007-ntdll-Properly-handle-PAGE_WRITECOPY-protection.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0008-ntdll-Only-enable-true-WRITECOPY-protection-when-a-s.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0004-ntdll-Wait-until-builtin-dlls-are-unloaded-before-re.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0005-ntdll-Setup-a-temporary-signal-handler-during-proces.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0006-ntdll-Properly-handle-PAGE_WRITECOPY-protection.patch)
$(call APPLY_FILE,ntdll-WRITECOPY/0007-ntdll-Only-enable-true-WRITECOPY-protection-when-a-s.patch)
@( \
echo '+ { "ntdll-WRITECOPY", "Michael Müller", "Change WRITECOPY memory protection to WRITE on first write. [rev 3]" },'; \
) > ntdll-WRITECOPY.ok

View File

@ -1,4 +1,4 @@
From 9dd581f7b7013b9bc26894292f0fffc493caebdd Mon Sep 17 00:00:00 2001
From 482071f086b4e93d8bd9e1c57652478bfcd98ecf Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 4 Oct 2014 02:35:44 +0200
Subject: ntdll: Trigger write watches before passing userdata pointer to

View File

@ -1,4 +1,4 @@
From 7d9f628d8fa776d60c1f81d88cd1730c65d2f349 Mon Sep 17 00:00:00 2001
From 1eeeb531c7e0188ecf7f39166dfe299fef2c7116 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 4 Oct 2014 02:38:27 +0200
Subject: advapi: Trigger write watches before passing userdata pointer to read

View File

@ -1,4 +1,4 @@
From e01c439ea2f8af11a0ebefd23cabf59e0864c142 Mon Sep 17 00:00:00 2001
From 9adae8afba3818e91532cc84cdfe350d27aa0434 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 02:48:16 +0200
Subject: ntdll: Fix handling of page fault if a guard page and write watch is

View File

@ -1,29 +0,0 @@
From 7bec7a1bbe62894ed24a07fb7cb2af6a1a496210 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 02:49:51 +0200
Subject: ntdll: Avoid race-condition if two threads trigger a write watch at
exactly the same time.
---
dlls/ntdll/virtual.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index f8a5dd3..0864c24 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -1522,9 +1522,9 @@ NTSTATUS virtual_handle_fault( LPCVOID addr, DWORD err )
{
void *page = ROUND_ADDR( addr, page_mask );
BYTE *vprot = &view->prot[((const char *)page - (const char *)view->base) >> page_shift];
- if ((err & EXCEPTION_WRITE_FAULT) && (view->protect & VPROT_WRITEWATCH))
+ if (err & EXCEPTION_WRITE_FAULT)
{
- if (*vprot & VPROT_WRITEWATCH)
+ if ((view->protect & VPROT_WRITEWATCH) && (*vprot & VPROT_WRITEWATCH))
{
*vprot &= ~VPROT_WRITEWATCH;
VIRTUAL_SetProt( view, page, page_size, *vprot );
--
2.1.1

View File

@ -1,4 +1,4 @@
From bcf2dbbc2b5a3551ab2db7ed6d49b1d34c8067d7 Mon Sep 17 00:00:00 2001
From da712e7425c012b55cda572e7e57545b7cd86314 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 02:51:51 +0200
Subject: ntdll: Wait until builtin dlls are unloaded before releasing the

View File

@ -1,4 +1,4 @@
From 8237dc994163a63581b9a5414facdab0da897d59 Mon Sep 17 00:00:00 2001
From cbb34fc193e2b2236ef7fec301e6d34be39d92aa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 02:53:22 +0200
Subject: ntdll: Setup a temporary signal handler during process startup to

View File

@ -1,12 +1,12 @@
From 48c067d93de63a0dacbeaf1b962fa614f6015598 Mon Sep 17 00:00:00 2001
From b9feb57a3a271cc42e37707a9b5ecac51cc70269 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 02:56:08 +0200
Subject: ntdll: Properly handle PAGE_WRITECOPY protection.
---
dlls/kernel32/tests/virtual.c | 12 ++----------
dlls/ntdll/virtual.c | 12 +++++++++++-
2 files changed, 13 insertions(+), 11 deletions(-)
dlls/ntdll/virtual.c | 16 +++++++++++++---
2 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/dlls/kernel32/tests/virtual.c b/dlls/kernel32/tests/virtual.c
index 0955d30..5b81e38 100644
@ -39,7 +39,7 @@ index 0955d30..5b81e38 100644
UnmapViewOfFile(base);
diff --git a/dlls/ntdll/virtual.c b/dlls/ntdll/virtual.c
index 0864c24..47654f4 100644
index f8a5dd3..47654f4 100644
--- a/dlls/ntdll/virtual.c
+++ b/dlls/ntdll/virtual.c
@@ -179,8 +179,13 @@ static int VIRTUAL_GetUnixProt( BYTE vprot )
@ -57,7 +57,16 @@ index 0864c24..47654f4 100644
if (vprot & VPROT_WRITEWATCH) prot &= ~PROT_WRITE;
}
if (!prot) prot = PROT_NONE;
@@ -1529,6 +1534,11 @@ NTSTATUS virtual_handle_fault( LPCVOID addr, DWORD err )
@@ -1522,13 +1527,18 @@ NTSTATUS virtual_handle_fault( LPCVOID addr, DWORD err )
{
void *page = ROUND_ADDR( addr, page_mask );
BYTE *vprot = &view->prot[((const char *)page - (const char *)view->base) >> page_shift];
- if ((err & EXCEPTION_WRITE_FAULT) && (view->protect & VPROT_WRITEWATCH))
+ if (err & EXCEPTION_WRITE_FAULT)
{
- if (*vprot & VPROT_WRITEWATCH)
+ if ((view->protect & VPROT_WRITEWATCH) && (*vprot & VPROT_WRITEWATCH))
{
*vprot &= ~VPROT_WRITEWATCH;
VIRTUAL_SetProt( view, page, page_size, *vprot );
}

View File

@ -1,4 +1,4 @@
From d333e51c9996681756ceef30322bf20ae907cd68 Mon Sep 17 00:00:00 2001
From 41b7ce7f165e3e3c02e1aa6067f66feeef41d234 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 4 Oct 2014 03:22:09 +0200
Subject: ntdll: Only enable true WRITECOPY protection when a special