linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / arch / sparc / kernel / sys_sparc.c
index 8318dc6..5a220d6 100644 (file)
@@ -469,23 +469,21 @@ sys_rt_sigaction(int sig,
 
 asmlinkage int sys_getdomainname(char __user *name, int len)
 {
-       int nlen, err;
+       int nlen;
+       int err = -EFAULT;
        
-       if (len < 0)
-               return -EINVAL;
-
        down_read(&uts_sem);
        
        nlen = strlen(vx_new_uts(domainname)) + 1;
-       err = -EINVAL;
-       if (nlen > len)
-               goto out;
 
-       err = -EFAULT;
-       if (!copy_to_user(name, vx_new_uts(domainname), nlen))
-               err = 0;
-
-out:
+       if (nlen < len)
+               len = nlen;
+       if (len > __NEW_UTS_LEN)
+               goto done;
+       if (copy_to_user(name, vx_new_uts(domainname), len))
+               goto done;
+       err = 0;
+done:
        up_read(&uts_sem);
        return err;
 }