summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Viro <viro@parcelfarce.linux.theplanet.co.uk>2004-07-13 19:37:27 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-07-13 19:37:27 -0700
commit524f26779b233c1bf1afd3fe78bfdd0d50130008 (patch)
treea3aa5fc24abe305d6d7e046218d0c8d6c1fb26ed
parentdeea66757be9c01642963c2951fc30192ce1860b (diff)
[PATCH] sparse: aout32 sparse fixes for compat
this basically repeats the stuff done to fs/binfmt_aout.c for amd64 and sparc64 aout32.
-rw-r--r--arch/sparc64/kernel/binfmt_aout32.c21
-rw-r--r--arch/x86_64/ia32/ia32_aout.c15
2 files changed, 19 insertions, 17 deletions
diff --git a/arch/sparc64/kernel/binfmt_aout32.c b/arch/sparc64/kernel/binfmt_aout32.c
index 580a8c5d2706..dc46293c0c0c 100644
--- a/arch/sparc64/kernel/binfmt_aout32.c
+++ b/arch/sparc64/kernel/binfmt_aout32.c
@@ -112,9 +112,9 @@ static int aout32_core_dump(long signr, struct pt_regs *regs, struct file *file)
/* make sure we actually have a data and stack area to dump */
set_fs(USER_DS);
- if (verify_area(VERIFY_READ, (void *) START_DATA(dump), dump.u_dsize))
+ if (verify_area(VERIFY_READ, (void __user *) START_DATA(dump), dump.u_dsize))
dump.u_dsize = 0;
- if (verify_area(VERIFY_READ, (void *) START_STACK(dump), dump.u_ssize))
+ if (verify_area(VERIFY_READ, (void __user *) START_STACK(dump), dump.u_ssize))
dump.u_ssize = 0;
set_fs(KERNEL_DS);
@@ -148,24 +148,25 @@ end_coredump:
* addresses on the "stack", returning the new stack pointer value.
*/
-static u32 *create_aout32_tables(char * p, struct linux_binprm * bprm)
+static u32 __user *create_aout32_tables(char __user *p, struct linux_binprm *bprm)
{
- u32 *argv, *envp;
- u32 *sp;
+ u32 __user *argv;
+ u32 __user *envp;
+ u32 __user *sp;
int argc = bprm->argc;
int envc = bprm->envc;
- sp = (u32 *) ((-(unsigned long)sizeof(char *)) & (unsigned long) p);
+ sp = (u32 __user *)((-(unsigned long)sizeof(char *))&(unsigned long)p);
/* This imposes the proper stack alignment for a new process. */
- sp = (u32 *) (((unsigned long) sp) & ~7);
+ sp = (u32 __user *) (((unsigned long) sp) & ~7);
if ((envc+argc+3)&1)
--sp;
sp -= envc+1;
- envp = (u32 *) sp;
+ envp = sp;
sp -= argc+1;
- argv = (u32 *) sp;
+ argv = sp;
put_user(argc,--sp);
current->mm->arg_start = (unsigned long) p;
while (argc-->0) {
@@ -319,7 +320,7 @@ beyond_if:
}
current->mm->start_stack =
- (unsigned long) create_aout32_tables((char *)bprm->p, bprm);
+ (unsigned long) create_aout32_tables((char __user *)bprm->p, bprm);
if (!(orig_thr_flags & _TIF_32BIT)) {
unsigned long pgd_cache;
diff --git a/arch/x86_64/ia32/ia32_aout.c b/arch/x86_64/ia32/ia32_aout.c
index 040adf6991a2..040e56f759e7 100644
--- a/arch/x86_64/ia32/ia32_aout.c
+++ b/arch/x86_64/ia32/ia32_aout.c
@@ -216,18 +216,19 @@ end_coredump:
* memory and creates the pointer tables from them, and puts their
* addresses on the "stack", returning the new stack pointer value.
*/
-static u32 * create_aout_tables(char * p, struct linux_binprm * bprm)
+static u32 __user *create_aout_tables(char __user *p, struct linux_binprm *bprm)
{
- u32 *argv, *envp;
- u32 * sp;
+ u32 __user *argv;
+ u32 __user *envp;
+ u32 __user *sp;
int argc = bprm->argc;
int envc = bprm->envc;
- sp = (u32 *) ((-(unsigned long)sizeof(u32)) & (unsigned long) p);
+ sp = (u32 __user *) ((-(unsigned long)sizeof(u32)) & (unsigned long) p);
sp -= envc+1;
- envp = (u32 *) sp;
+ envp = sp;
sp -= argc+1;
- argv = (u32 *) sp;
+ argv = sp;
put_user((unsigned long) envp,--sp);
put_user((unsigned long) argv,--sp);
put_user(argc,--sp);
@@ -403,7 +404,7 @@ beyond_if:
}
current->mm->start_stack =
- (unsigned long) create_aout_tables((char *) bprm->p, bprm);
+ (unsigned long)create_aout_tables((char __user *)bprm->p, bprm);
/* start thread */
asm volatile("movl %0,%%fs" :: "r" (0)); \
asm volatile("movl %0,%%es; movl %0,%%ds": :"r" (__USER32_DS));