NT 4.0 fixup_mmaps_after_fork() patch

Jason Tishler jason@tishler.net
Wed Jan 15 19:12:00 GMT 2003


It appears that ReadProcessMemory() can fail with ERROR_NOACCESS under
NT 4.0.  See attached patch.

BTW, my mmap-test test case works under NT 4.0 without this patch.
However, vsFTPd does not.  Go figure!

Thanks,
Jason

-- 
PGP/GPG Key: http://www.tishler.net/jason/pubkey.asc or key servers
Fingerprint: 7A73 1405 7F2B E669 C19D  8784 1AFD E4CC ECF4 8EF6
-------------- next part --------------
Index: mmap.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/mmap.cc,v
retrieving revision 1.68
diff -u -p -r1.68 mmap.cc
--- mmap.cc	15 Jan 2003 10:21:23 -0000	1.68
+++ mmap.cc	15 Jan 2003 18:51:30 -0000
@@ -986,9 +986,11 @@ fixup_mmaps_after_fork (HANDLE parent)
 					       getpagesize (), NULL))
 		      {
 			DWORD old_prot;
+			DWORD last_error = GetLastError ();
 
-			if (GetLastError () != ERROR_PARTIAL_COPY ||
-			    !wincap.virtual_protect_works_on_shared_pages ())
+			if (last_error != ERROR_PARTIAL_COPY
+			    && last_error != ERROR_NOACCESS
+			    || !wincap.virtual_protect_works_on_shared_pages ())
 			  {
 			    system_printf ("ReadProcessMemory failed for "
 			    		   "MAP_PRIVATE address %p, %E",
-------------- next part --------------
2003-01-15  Jason Tishler  <jason@tishler.net>

	* mmap.cc (fixup_mmaps_after_fork): Add ERROR_NOACCESS to the list of
	ReadProcessMemory() error codes that trigger a retry with temporary
	PAGE_READONLY access.  Note that this can occur on NT 4.0.


More information about the Cygwin-patches mailing list