switch xattr syscalls to fget_light/fput_light
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
863ced7fe7
commit
7449af1e8b
20
fs/xattr.c
20
fs/xattr.c
@ -399,11 +399,12 @@ SYSCALL_DEFINE5(lsetxattr, const char __user *, pathname,
|
|||||||
SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
|
SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
|
||||||
const void __user *,value, size_t, size, int, flags)
|
const void __user *,value, size_t, size, int, flags)
|
||||||
{
|
{
|
||||||
|
int fput_needed;
|
||||||
struct file *f;
|
struct file *f;
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
int error = -EBADF;
|
int error = -EBADF;
|
||||||
|
|
||||||
f = fget(fd);
|
f = fget_light(fd, &fput_needed);
|
||||||
if (!f)
|
if (!f)
|
||||||
return error;
|
return error;
|
||||||
dentry = f->f_path.dentry;
|
dentry = f->f_path.dentry;
|
||||||
@ -413,7 +414,7 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
|
|||||||
error = setxattr(dentry, name, value, size, flags);
|
error = setxattr(dentry, name, value, size, flags);
|
||||||
mnt_drop_write_file(f);
|
mnt_drop_write_file(f);
|
||||||
}
|
}
|
||||||
fput(f);
|
fput_light(f, fput_needed);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,15 +487,16 @@ SYSCALL_DEFINE4(lgetxattr, const char __user *, pathname,
|
|||||||
SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name,
|
SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name,
|
||||||
void __user *, value, size_t, size)
|
void __user *, value, size_t, size)
|
||||||
{
|
{
|
||||||
|
int fput_needed;
|
||||||
struct file *f;
|
struct file *f;
|
||||||
ssize_t error = -EBADF;
|
ssize_t error = -EBADF;
|
||||||
|
|
||||||
f = fget(fd);
|
f = fget_light(fd, &fput_needed);
|
||||||
if (!f)
|
if (!f)
|
||||||
return error;
|
return error;
|
||||||
audit_inode(NULL, f->f_path.dentry);
|
audit_inode(NULL, f->f_path.dentry);
|
||||||
error = getxattr(f->f_path.dentry, name, value, size);
|
error = getxattr(f->f_path.dentry, name, value, size);
|
||||||
fput(f);
|
fput_light(f, fput_needed);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -566,15 +568,16 @@ SYSCALL_DEFINE3(llistxattr, const char __user *, pathname, char __user *, list,
|
|||||||
|
|
||||||
SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
|
SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
|
||||||
{
|
{
|
||||||
|
int fput_needed;
|
||||||
struct file *f;
|
struct file *f;
|
||||||
ssize_t error = -EBADF;
|
ssize_t error = -EBADF;
|
||||||
|
|
||||||
f = fget(fd);
|
f = fget_light(fd, &fput_needed);
|
||||||
if (!f)
|
if (!f)
|
||||||
return error;
|
return error;
|
||||||
audit_inode(NULL, f->f_path.dentry);
|
audit_inode(NULL, f->f_path.dentry);
|
||||||
error = listxattr(f->f_path.dentry, list, size);
|
error = listxattr(f->f_path.dentry, list, size);
|
||||||
fput(f);
|
fput_light(f, fput_needed);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -634,11 +637,12 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname,
|
|||||||
|
|
||||||
SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
|
SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
|
||||||
{
|
{
|
||||||
|
int fput_needed;
|
||||||
struct file *f;
|
struct file *f;
|
||||||
struct dentry *dentry;
|
struct dentry *dentry;
|
||||||
int error = -EBADF;
|
int error = -EBADF;
|
||||||
|
|
||||||
f = fget(fd);
|
f = fget_light(fd, &fput_needed);
|
||||||
if (!f)
|
if (!f)
|
||||||
return error;
|
return error;
|
||||||
dentry = f->f_path.dentry;
|
dentry = f->f_path.dentry;
|
||||||
@ -648,7 +652,7 @@ SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
|
|||||||
error = removexattr(dentry, name);
|
error = removexattr(dentry, name);
|
||||||
mnt_drop_write_file(f);
|
mnt_drop_write_file(f);
|
||||||
}
|
}
|
||||||
fput(f);
|
fput_light(f, fput_needed);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user