提交 7449af1e 编写于 作者: A Al Viro

switch xattr syscalls to fget_light/fput_light

Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 863ced7f
...@@ -399,11 +399,12 @@ SYSCALL_DEFINE5(lsetxattr, const char __user *, pathname, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册