* platform.
*/
+#include <linux/config.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/sched.h>
asmlinkage long sys_getdomainname(char __user *name, int len)
{
- int nlen, err;
-
- if (len < 0)
- return -EINVAL;
+ int nlen;
+ int err = -EFAULT;
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;
}