nfsd: make nfs4_client->cl_addr a struct sockaddr_storage
[safe/jmp/linux-2.6] / fs / xattr.c
index 0367a5d..1c3d0af 100644 (file)
@@ -237,13 +237,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
        if (size) {
                if (size > XATTR_SIZE_MAX)
                        return -E2BIG;
-               kvalue = kmalloc(size, GFP_KERNEL);
-               if (!kvalue)
-                       return -ENOMEM;
-               if (copy_from_user(kvalue, value, size)) {
-                       kfree(kvalue);
-                       return -EFAULT;
-               }
+               kvalue = memdup_user(value, size);
+               if (IS_ERR(kvalue))
+                       return PTR_ERR(kvalue);
        }
 
        error = vfs_setxattr(d, kname, kvalue, size, flags);
@@ -301,7 +297,7 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
                return error;
        dentry = f->f_path.dentry;
        audit_inode(NULL, dentry);
-       error = mnt_want_write(f->f_path.mnt);
+       error = mnt_want_write_file(f);
        if (!error) {
                error = setxattr(dentry, name, value, size, flags);
                mnt_drop_write(f->f_path.mnt);
@@ -499,8 +495,8 @@ SYSCALL_DEFINE2(removexattr, const char __user *, pathname,
        return error;
 }
 
-asmlinkage long
-sys_lremovexattr(const char __user *pathname, const char __user *name)
+SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname,
+               const char __user *, name)
 {
        struct path path;
        int error;
@@ -517,8 +513,7 @@ sys_lremovexattr(const char __user *pathname, const char __user *name)
        return error;
 }
 
-asmlinkage long
-sys_fremovexattr(int fd, const char __user *name)
+SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
 {
        struct file *f;
        struct dentry *dentry;
@@ -529,7 +524,7 @@ sys_fremovexattr(int fd, const char __user *name)
                return error;
        dentry = f->f_path.dentry;
        audit_inode(NULL, dentry);
-       error = mnt_want_write(f->f_path.mnt);
+       error = mnt_want_write_file(f);
        if (!error) {
                error = removexattr(dentry, name);
                mnt_drop_write(f->f_path.mnt);