VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / fs / binfmt_aout.c
index 40ce9d4..85e8556 100644 (file)
@@ -28,7 +28,6 @@
 
 #include <asm/system.h>
 #include <asm/uaccess.h>
-#include <asm/pgalloc.h>
 #include <asm/cacheflush.h>
 
 static int load_aout_binary(struct linux_binprm *, struct pt_regs * regs);
@@ -142,14 +141,14 @@ static int aout_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);
 #ifdef __sparc__
-       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;
 #else
-       if (verify_area(VERIFY_READ, (void *) START_DATA(dump), dump.u_dsize << PAGE_SHIFT))
+       if (verify_area(VERIFY_READ, (void __user *)START_DATA(dump), dump.u_dsize << PAGE_SHIFT))
                dump.u_dsize = 0;
-       if (verify_area(VERIFY_READ, (void *) START_STACK(dump), dump.u_ssize << PAGE_SHIFT))
+       if (verify_area(VERIFY_READ, (void __user *)START_STACK(dump), dump.u_ssize << PAGE_SHIFT))
                dump.u_ssize = 0;
 #endif
 
@@ -195,17 +194,18 @@ end_coredump:
  * memory and creates the pointer tables from them, and puts their
  * addresses on the "stack", returning the new stack pointer value.
  */
-static unsigned long * create_aout_tables(char * p, struct linux_binprm * bprm)
+static unsigned long __user *create_aout_tables(char __user *p, struct linux_binprm * bprm)
 {
-       char **argv, **envp;
-       unsigned long * sp;
+       char __user * __user *argv;
+       char __user * __user *envp;
+       unsigned long __user *sp;
        int argc = bprm->argc;
        int envc = bprm->envc;
 
-       sp = (unsigned long *) ((-(unsigned long)sizeof(char *)) & (unsigned long) p);
+       sp = (void __user *)((-(unsigned long)sizeof(char *)) & (unsigned long) p);
 #ifdef __sparc__
        /* This imposes the proper stack alignment for a new process. */
-       sp = (unsigned long *) (((unsigned long) sp) & ~7);
+       sp = (void __user *) (((unsigned long) sp) & ~7);
        if ((envc+argc+3)&1) --sp;
 #endif
 #ifdef __alpha__
@@ -222,9 +222,9 @@ static unsigned long * create_aout_tables(char * p, struct linux_binprm * bprm)
        put_user(0x3e9, --sp);
 #endif
        sp -= envc+1;
-       envp = (char **) sp;
+       envp = (char __user * __user *) sp;
        sp -= argc+1;
-       argv = (char **) sp;
+       argv = (char __user * __user *) sp;
 #if defined(__i386__) || defined(__mc68000__) || defined(__arm__) || defined(__arch_um__)
        put_user((unsigned long) envp,--sp);
        put_user((unsigned long) argv,--sp);
@@ -350,7 +350,8 @@ static int load_aout_binary(struct linux_binprm * bprm, struct pt_regs * regs)
                        return error;
                }
 
-               error = bprm->file->f_op->read(bprm->file, (char *)text_addr,
+               error = bprm->file->f_op->read(bprm->file,
+                         (char __user *)text_addr,
                          ex.a_text+ex.a_data, &pos);
                if ((signed long)error < 0) {
                        send_sig(SIGKILL, current, 0);
@@ -379,7 +380,8 @@ static int load_aout_binary(struct linux_binprm * bprm, struct pt_regs * regs)
                if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
                        loff_t pos = fd_offset;
                        do_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
-                       bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
+                       bprm->file->f_op->read(bprm->file,
+                                       (char __user *)N_TXTADDR(ex),
                                        ex.a_text+ex.a_data, &pos);
                        flush_icache_range((unsigned long) N_TXTADDR(ex),
                                           (unsigned long) N_TXTADDR(ex) +
@@ -423,7 +425,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);
 #ifdef __alpha__
        regs->gp = ex.a_gpvalue;
 #endif
@@ -481,7 +483,7 @@ static int load_aout_library(struct file *file)
 
                do_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);
                
-               file->f_op->read(file, (char *)start_addr,
+               file->f_op->read(file, (char __user *)start_addr,
                        ex.a_text + ex.a_data, &pos);
                flush_icache_range((unsigned long) start_addr,
                                   (unsigned long) start_addr + ex.a_text + ex.a_data);