|
@@ -564,25 +564,20 @@ SYSCALL_DEFINE0(getdtablesize)
|
|
*/
|
|
*/
|
|
SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen)
|
|
SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen)
|
|
{
|
|
{
|
|
- unsigned len;
|
|
|
|
- int i;
|
|
|
|
|
|
+ int len, err = 0;
|
|
|
|
+ char *kname;
|
|
|
|
|
|
- if (!access_ok(VERIFY_WRITE, name, namelen))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- len = namelen;
|
|
|
|
- if (len > 32)
|
|
|
|
- len = 32;
|
|
|
|
|
|
+ if (namelen > 32)
|
|
|
|
+ namelen = 32;
|
|
|
|
|
|
down_read(&uts_sem);
|
|
down_read(&uts_sem);
|
|
- for (i = 0; i < len; ++i) {
|
|
|
|
- __put_user(utsname()->domainname[i], name + i);
|
|
|
|
- if (utsname()->domainname[i] == '\0')
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ kname = utsname()->domainname;
|
|
|
|
+ len = strnlen(kname, namelen);
|
|
|
|
+ if (copy_to_user(name, kname, min(len + 1, namelen)))
|
|
|
|
+ err = -EFAULT;
|
|
up_read(&uts_sem);
|
|
up_read(&uts_sem);
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return err;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|