* miscfuncs.cc (+__check_invalid_read_ptr_errno): New function.
* syscalls.c (_write): Validate that write buffer is accessible for reading, not writing. * winsup.h: Declare new function, increase regparmization of check_* functions.
This commit is contained in:
		| @@ -1,3 +1,11 @@ | |||||||
|  | 2001-10-20  Christopher Faylor  <cgf@redhat.com> | ||||||
|  |  | ||||||
|  | 	* miscfuncs.cc (+__check_invalid_read_ptr_errno): New function. | ||||||
|  | 	* syscalls.c (_write): Validate that write buffer is accessible for | ||||||
|  | 	reading, not writing. | ||||||
|  | 	* winsup.h: Declare new function, increase regparmization of check_* | ||||||
|  | 	functions. | ||||||
|  |  | ||||||
| 2001-10-19  Corinna Vinschen  <corinna@vinschen.de> | 2001-10-19  Corinna Vinschen  <corinna@vinschen.de> | ||||||
|  |  | ||||||
| 	* path.cc (getcwd): Allow len == 0 when buf == NULL. | 	* path.cc (getcwd): Allow len == 0 when buf == NULL. | ||||||
|   | |||||||
| @@ -153,3 +153,12 @@ __check_null_invalid_struct_errno (const void *s, unsigned sz) | |||||||
|     set_errno (__err); |     set_errno (__err); | ||||||
|   return __err; |   return __err; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | int __stdcall | ||||||
|  | __check_invalid_read_ptr_errno (const void *s, unsigned sz) | ||||||
|  | { | ||||||
|  |   if (!s || IsBadReadPtr ((void *) s, sz)) | ||||||
|  |     set_errno (EFAULT); | ||||||
|  |  | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|   | |||||||
| @@ -344,7 +344,7 @@ _read (int fd, void *ptr, size_t len) | |||||||
| extern "C" ssize_t | extern "C" ssize_t | ||||||
| _write (int fd, const void *ptr, size_t len) | _write (int fd, const void *ptr, size_t len) | ||||||
| { | { | ||||||
|   if (__check_null_invalid_struct_errno (ptr, len)) |   if (__check_invalid_read_ptr_errno (ptr, len)) | ||||||
|     return -1; |     return -1; | ||||||
|  |  | ||||||
|   int res = -1; |   int res = -1; | ||||||
|   | |||||||
| @@ -191,8 +191,9 @@ void set_console_handler (); | |||||||
|  |  | ||||||
| int __stdcall check_null_empty_str (const char *name) __attribute__ ((regparm(1))); | int __stdcall check_null_empty_str (const char *name) __attribute__ ((regparm(1))); | ||||||
| int __stdcall check_null_empty_str_errno (const char *name) __attribute__ ((regparm(1))); | int __stdcall check_null_empty_str_errno (const char *name) __attribute__ ((regparm(1))); | ||||||
| int __stdcall __check_null_invalid_struct (const void *s, unsigned sz) __attribute__ ((regparm(1))); | int __stdcall __check_null_invalid_struct (const void *s, unsigned sz) __attribute__ ((regparm(2))); | ||||||
| int __stdcall __check_null_invalid_struct_errno (const void *s, unsigned sz) __attribute__ ((regparm(1))); | int __stdcall __check_null_invalid_struct_errno (const void *s, unsigned sz) __attribute__ ((regparm(2))); | ||||||
|  | int __stdcall __check_invalid_read_ptr_errno (const void *s, unsigned sz) __attribute__ ((regparm(2))); | ||||||
|  |  | ||||||
| #define check_null_invalid_struct(s) \ | #define check_null_invalid_struct(s) \ | ||||||
|   __check_null_invalid ((s), sizeof (*(s))) |   __check_null_invalid ((s), sizeof (*(s))) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user