This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / arch / x86_64 / ia32 / sys_ia32.c
index ab80034..282695a 100644 (file)
@@ -61,6 +61,7 @@
 #include <linux/ptrace.h>
 #include <linux/highuid.h>
 #include <linux/vmalloc.h>
+#include <linux/vs_cvirt.h>
 #include <asm/mman.h>
 #include <asm/types.h>
 #include <asm/uaccess.h>
@@ -885,7 +886,7 @@ sys32_sysctl(struct sysctl_ia32 __user *args32)
        oldvalp = (void *) A(a32.oldval);
        newvalp = (void *) A(a32.newval);
 
-       if ((oldvalp && get_user(oldlen, (int __user *)compat_ptr(a32.oldlenp)))
+       if ((oldvalp && get_user(oldlen, (int *) A(a32.oldlenp)))
            || !access_ok(VERIFY_WRITE, namep, 0)
            || !access_ok(VERIFY_WRITE, oldvalp, 0)
            || !access_ok(VERIFY_WRITE, newvalp, 0))
@@ -897,7 +898,7 @@ sys32_sysctl(struct sysctl_ia32 __user *args32)
        unlock_kernel();
        set_fs(old_fs);
 
-       if (oldvalp && put_user (oldlen, (int __user *)compat_ptr(a32.oldlenp)))
+       if (oldvalp && put_user (oldlen, (int *) A(a32.oldlenp)))
                return -EFAULT;
 
        return ret;
@@ -1059,6 +1060,7 @@ asmlinkage long sys32_mmap2(unsigned long addr, unsigned long len,
 asmlinkage long sys32_olduname(struct oldold_utsname __user * name)
 {
        int error;
+       struct new_utsname *ptr;
 
        if (!name)
                return -EFAULT;
@@ -1067,13 +1069,14 @@ asmlinkage long sys32_olduname(struct oldold_utsname __user * name)
   
        down_read(&uts_sem);
        
-       error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN);
+       ptr = vx_new_utsname();
+       error = __copy_to_user(&name->sysname,ptr->sysname,__OLD_UTS_LEN);
         __put_user(0,name->sysname+__OLD_UTS_LEN);
-        __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN);
+        __copy_to_user(&name->nodename,ptr->nodename,__OLD_UTS_LEN);
         __put_user(0,name->nodename+__OLD_UTS_LEN);
-        __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN);
+        __copy_to_user(&name->release,ptr->release,__OLD_UTS_LEN);
         __put_user(0,name->release+__OLD_UTS_LEN);
-        __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN);
+        __copy_to_user(&name->version,ptr->version,__OLD_UTS_LEN);
         __put_user(0,name->version+__OLD_UTS_LEN);
         { 
                 char *arch = "x86_64";
@@ -1096,7 +1099,7 @@ long sys32_uname(struct old_utsname __user * name)
        if (!name)
                return -EFAULT;
        down_read(&uts_sem);
-       err=copy_to_user(name, &system_utsname, sizeof (*name));
+       err=copy_to_user(name, vx_new_utsname(), sizeof (*name));
        up_read(&uts_sem);
        if (personality(current->personality) == PER_LINUX32) 
                err |= copy_to_user(&name->machine, "i686", 5);
@@ -1288,20 +1291,28 @@ sys_timer_create(clockid_t which_clock,
 long
 sys32_timer_create(u32 clock, struct sigevent32 __user *se32, timer_t __user *timer_id)
 {
-       struct sigevent __user *p = NULL;
+       struct sigevent se;
+       mm_segment_t oldfs;
+       long err;
+
        if (se32) { 
-               struct sigevent se;
-               p = compat_alloc_user_space(sizeof(struct sigevent));
                memset(&se, 0, sizeof(struct sigevent)); 
                if (get_user(se.sigev_value.sival_int,  &se32->sigev_value) ||
                    __get_user(se.sigev_signo, &se32->sigev_signo) ||
                    __get_user(se.sigev_notify, &se32->sigev_notify) ||
                    __copy_from_user(&se._sigev_un._pad, &se32->payload, 
-                                    sizeof(se32->payload)) ||
-                   copy_to_user(p, &se, sizeof(se)))
+                                    sizeof(se32->payload)))
                        return -EFAULT;
        } 
-       return sys_timer_create(clock, p, timer_id);
+       if (!access_ok(VERIFY_WRITE,timer_id,sizeof(timer_t)))
+               return -EFAULT;
+
+       oldfs = get_fs();
+       set_fs(KERNEL_DS);
+       err = sys_timer_create(clock, se32 ? &se : NULL, timer_id);
+       set_fs(oldfs); 
+       
+       return err; 
 } 
 
 long sys32_fadvise64_64(int fd, __u32 offset_low, __u32 offset_high, 
@@ -1348,4 +1359,3 @@ static int __init ia32_init (void)
 __initcall(ia32_init);
 
 extern unsigned long ia32_sys_call_table[];
-EXPORT_SYMBOL(ia32_sys_call_table);