? virtualquery.patch Index: path.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/path.cc,v retrieving revision 1.154 diff -u -p -r1.154 path.cc --- path.cc 2001/06/24 22:26:52 1.154 +++ path.cc 2001/06/27 14:16:28 @@ -3357,14 +3357,24 @@ cygwin_split_path (const char *path, cha int __stdcall check_null_empty_path (const char *name) { - MEMORY_BASIC_INFORMATION m; - if (!name || !VirtualQuery (name, &m, sizeof (m)) || (m.State != MEM_COMMIT)) - return EFAULT; + if (!name || IsBadStringPtr (name, MAX_PATH + 1)) + { + return EFAULT; + } if (!*name) return ENOENT; return 0; +} + +int __stdcall +check_null_empty_path_errno(const char *name) +{ + int __err; + if ((__err = check_null_empty_path (name))) + set_errno (__err); + return __err; } /*****************************************************************************/ Index: path.h =================================================================== RCS file: /cvs/src/src/winsup/cygwin/path.h,v retrieving revision 1.30 diff -u -p -r1.30 path.h --- path.h 2001/06/24 22:26:52 1.30 +++ path.h 2001/06/27 14:16:28 @@ -151,20 +151,12 @@ class path_conv int __stdcall get_device_number (const char *name, int &unit, BOOL from_conv = FALSE) __attribute__ ((regparm(3))); int __stdcall slash_unc_prefix_p (const char *path) __attribute__ ((regparm(1))); int __stdcall check_null_empty_path (const char *name) __attribute__ ((regparm(1))); +int __stdcall check_null_empty_path_errno (const char *name) __attribute__ ((regparm(1))); const char * __stdcall find_exec (const char *name, path_conv& buf, const char *winenv = "PATH=", int null_if_notfound = 0, const char **known_suffix = NULL) __attribute__ ((regparm(3))); /* Common macros for checking for invalid path names */ - -#define check_null_empty_path_errno(src) \ -({ \ - int __err; \ - if ((__err = check_null_empty_path(src))) \ - set_errno (__err); \ - __err; \ -}) - #define isdrive(s) (isalpha (*(s)) && (s)[1] == ':') static inline bool Index: resource.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/resource.cc,v retrieving revision 1.10 diff -u -p -r1.10 resource.cc --- resource.cc 2001/06/24 22:26:52 1.10 +++ resource.cc 2001/06/27 14:16:29 @@ -105,8 +105,7 @@ extern "C" int getrlimit (int resource, struct rlimit *rlp) { - MEMORY_BASIC_INFORMATION m; - if (!rlp || !VirtualQuery (rlp, &m, sizeof (m)) || (m.State != MEM_COMMIT)) + if (!rlp || IsBadWritePtr (rlp, sizeof (struct rlimit))) { set_errno (EFAULT); return -1; @@ -141,8 +140,7 @@ extern "C" int setrlimit (int resource, const struct rlimit *rlp) { - MEMORY_BASIC_INFORMATION m; - if (!rlp || !VirtualQuery (rlp, &m, sizeof (m)) || (m.State != MEM_COMMIT)) + if (!rlp || IsBadWritePtr ((void *) rlp, sizeof (struct rlimit))) { set_errno (EFAULT); return -1; Index: thread.cc =================================================================== RCS file: /cvs/src/src/winsup/cygwin/thread.cc,v retrieving revision 1.38 diff -u -p -r1.38 thread.cc --- thread.cc 2001/06/26 14:57:33 1.38 +++ thread.cc 2001/06/27 14:16:30 @@ -739,9 +739,7 @@ verifyable_object::~verifyable_object () int __stdcall check_valid_pointer (void *pointer) { - MEMORY_BASIC_INFORMATION m; - if (!pointer || !VirtualQuery (pointer, &m, sizeof (m)) - || (m.State != MEM_COMMIT)) + if (!pointer || IsBadWritePtr(pointer, sizeof (verifyable_object))) return EFAULT; return 0; }