Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / sparc / kernel / sys_sunos.c
index 6b2bcce..ea99b5d 100644 (file)
 #include <linux/stat.h>
 #include <linux/slab.h>
 #include <linux/pagemap.h>
+#include <linux/capability.h>
 #include <linux/errno.h>
 #include <linux/smp.h>
 #include <linux/smp_lock.h>
 #include <linux/syscalls.h>
+#include <linux/vs_cvirt.h>
 
 #include <net/sock.h>
 
@@ -97,7 +99,7 @@ asmlinkage unsigned long sunos_mmap(unsigned long addr, unsigned long len,
                    iminor(file->f_dentry->d_inode) == 5) {
                        flags |= MAP_ANONYMOUS;
                        fput(file);
-                       file = 0;
+                       file = NULL;
                }
        }
        ret_type = flags & _MAP_NEW;
@@ -178,7 +180,7 @@ asmlinkage int sunos_brk(unsigned long brk)
         * Check against rlimit and stack..
         */
        retval = -ENOMEM;
-       rlim = current->rlim[RLIMIT_DATA].rlim_cur;
+       rlim = current->signal->rlim[RLIMIT_DATA].rlim_cur;
        if (rlim >= RLIM_INFINITY)
                rlim = ~0;
        if (brk - current->mm->end_code > rlim)
@@ -481,14 +483,16 @@ struct sunos_utsname {
 asmlinkage int sunos_uname(struct sunos_utsname __user *name)
 {
        int ret;
+       struct new_utsname *ptr;
        down_read(&uts_sem);
-       ret = copy_to_user(&name->sname[0], &system_utsname.sysname[0], sizeof(name->sname) - 1);
+       ptr = vx_new_utsname();
+       ret = copy_to_user(&name->sname[0], ptr->sysname, sizeof(name->sname) - 1);
        if (!ret) {
-               ret |= __copy_to_user(&name->nname[0], &system_utsname.nodename[0], sizeof(name->nname) - 1);
+               ret |= __copy_to_user(&name->nname[0], ptr->nodename, sizeof(name->nname) - 1);
                ret |= __put_user('\0', &name->nname[8]);
-               ret |= __copy_to_user(&name->rel[0], &system_utsname.release[0], sizeof(name->rel) - 1);
-               ret |= __copy_to_user(&name->ver[0], &system_utsname.version[0], sizeof(name->ver) - 1);
-               ret |= __copy_to_user(&name->mach[0], &system_utsname.machine[0], sizeof(name->mach) - 1);
+               ret |= __copy_to_user(&name->rel[0], ptr->release, sizeof(name->rel) - 1);
+               ret |= __copy_to_user(&name->ver[0], ptr->version, sizeof(name->ver) - 1);
+               ret |= __copy_to_user(&name->mach[0], ptr->machine, sizeof(name->mach) - 1);
        }
        up_read(&uts_sem);
        return ret ? -EFAULT : 0;
@@ -505,7 +509,7 @@ asmlinkage int sunos_nosys(void)
        info.si_signo = SIGSYS;
        info.si_errno = 0;
        info.si_code = __SI_FAULT|0x100;
-       info.si_addr = (void *)regs->pc;
+       info.si_addr = (void __user *)regs->pc;
        info.si_trapno = regs->u_regs[UREG_G1];
        send_sig_info(SIGSYS, &info, current);
        if (cnt++ < 4) {
@@ -755,7 +759,7 @@ sunos_mount(char __user *type, char __user *dir, int flags, void __user *data)
 {
        int linux_flags = 0;
        int ret = -EINVAL;
-       char *dev_fname = 0;
+       char *dev_fname = NULL;
        char *dir_page, *type_page;
 
        if (!capable (CAP_SYS_ADMIN))
@@ -894,7 +898,7 @@ asmlinkage long sunos_sysconf (int name)
                ret = ARG_MAX;
                break;
        case _SC_CHILD_MAX:
-               ret = CHILD_MAX;
+               ret = -1; /* no limit */
                break;
        case _SC_CLK_TCK:
                ret = HZ;
@@ -1131,7 +1135,7 @@ sunos_sigaction(int sig, const struct old_sigaction __user *act,
        if (act) {
                old_sigset_t mask;
 
-               if (verify_area(VERIFY_READ, act, sizeof(*act)) ||
+               if (!access_ok(VERIFY_READ, act, sizeof(*act)) ||
                    __get_user(new_ka.sa.sa_handler, &act->sa_handler) ||
                    __get_user(new_ka.sa.sa_flags, &act->sa_flags))
                        return -EFAULT;
@@ -1152,7 +1156,7 @@ sunos_sigaction(int sig, const struct old_sigaction __user *act,
                 * But then again we don't support SunOS lwp's anyways ;-)
                 */
                old_ka.sa.sa_flags ^= SUNOS_SV_INTERRUPT;
-               if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) ||
+               if (!access_ok(VERIFY_WRITE, oact, sizeof(*oact)) ||
                    __put_user(old_ka.sa.sa_handler, &oact->sa_handler) ||
                    __put_user(old_ka.sa.sa_flags, &oact->sa_flags))
                         return -EFAULT;