diff options
Diffstat (limited to 'fs/binfmt_aout.c')
| -rw-r--r-- | fs/binfmt_aout.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index 15d80bb35d6..f96eff04e11 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -20,11 +20,11 @@  #include <linux/fcntl.h>  #include <linux/ptrace.h>  #include <linux/user.h> -#include <linux/slab.h>  #include <linux/binfmts.h>  #include <linux/personality.h>  #include <linux/init.h>  #include <linux/coredump.h> +#include <linux/slab.h>  #include <asm/system.h>  #include <asm/uaccess.h> @@ -75,14 +75,16 @@ static int aout_core_dump(struct coredump_params *cprm)  	struct file *file = cprm->file;  	mm_segment_t fs;  	int has_dumped = 0; -	unsigned long dump_start, dump_size; +	void __user *dump_start; +	int dump_size;  	struct user dump;  #ifdef __alpha__ -#       define START_DATA(u)	(u.start_data) +#       define START_DATA(u)	((void __user *)u.start_data)  #else -#	define START_DATA(u)	((u.u_tsize << PAGE_SHIFT) + u.start_code) +#	define START_DATA(u)	((void __user *)((u.u_tsize << PAGE_SHIFT) + \ +				 u.start_code))  #endif -#       define START_STACK(u)   (u.start_stack) +#       define START_STACK(u)   ((void __user *)u.start_stack)  	fs = get_fs();  	set_fs(KERNEL_DS); @@ -104,9 +106,9 @@ static int aout_core_dump(struct coredump_params *cprm)  /* make sure we actually have a data and stack area to dump */  	set_fs(USER_DS); -	if (!access_ok(VERIFY_READ, (void __user *)START_DATA(dump), dump.u_dsize << PAGE_SHIFT)) +	if (!access_ok(VERIFY_READ, START_DATA(dump), dump.u_dsize << PAGE_SHIFT))  		dump.u_dsize = 0; -	if (!access_ok(VERIFY_READ, (void __user *)START_STACK(dump), dump.u_ssize << PAGE_SHIFT)) +	if (!access_ok(VERIFY_READ, START_STACK(dump), dump.u_ssize << PAGE_SHIFT))  		dump.u_ssize = 0;  	set_fs(KERNEL_DS);  |