mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
switch readdir/getdents to fget_light/fput_light
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
33
fs/readdir.c
33
fs/readdir.c
@@ -108,11 +108,11 @@ SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
|
||||
int error;
|
||||
struct file * file;
|
||||
struct readdir_callback buf;
|
||||
int fput_needed;
|
||||
|
||||
error = -EBADF;
|
||||
file = fget(fd);
|
||||
file = fget_light(fd, &fput_needed);
|
||||
if (!file)
|
||||
goto out;
|
||||
return -EBADF;
|
||||
|
||||
buf.result = 0;
|
||||
buf.dirent = dirent;
|
||||
@@ -121,8 +121,7 @@ SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
|
||||
if (buf.result)
|
||||
error = buf.result;
|
||||
|
||||
fput(file);
|
||||
out:
|
||||
fput_light(file, fput_needed);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -195,16 +194,15 @@ SYSCALL_DEFINE3(getdents, unsigned int, fd,
|
||||
struct file * file;
|
||||
struct linux_dirent __user * lastdirent;
|
||||
struct getdents_callback buf;
|
||||
int fput_needed;
|
||||
int error;
|
||||
|
||||
error = -EFAULT;
|
||||
if (!access_ok(VERIFY_WRITE, dirent, count))
|
||||
goto out;
|
||||
return -EFAULT;
|
||||
|
||||
error = -EBADF;
|
||||
file = fget(fd);
|
||||
file = fget_light(fd, &fput_needed);
|
||||
if (!file)
|
||||
goto out;
|
||||
return -EBADF;
|
||||
|
||||
buf.current_dir = dirent;
|
||||
buf.previous = NULL;
|
||||
@@ -221,8 +219,7 @@ SYSCALL_DEFINE3(getdents, unsigned int, fd,
|
||||
else
|
||||
error = count - buf.count;
|
||||
}
|
||||
fput(file);
|
||||
out:
|
||||
fput_light(file, fput_needed);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -278,16 +275,15 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd,
|
||||
struct file * file;
|
||||
struct linux_dirent64 __user * lastdirent;
|
||||
struct getdents_callback64 buf;
|
||||
int fput_needed;
|
||||
int error;
|
||||
|
||||
error = -EFAULT;
|
||||
if (!access_ok(VERIFY_WRITE, dirent, count))
|
||||
goto out;
|
||||
return -EFAULT;
|
||||
|
||||
error = -EBADF;
|
||||
file = fget(fd);
|
||||
file = fget_light(fd, &fput_needed);
|
||||
if (!file)
|
||||
goto out;
|
||||
return -EBADF;
|
||||
|
||||
buf.current_dir = dirent;
|
||||
buf.previous = NULL;
|
||||
@@ -305,7 +301,6 @@ SYSCALL_DEFINE3(getdents64, unsigned int, fd,
|
||||
else
|
||||
error = count - buf.count;
|
||||
}
|
||||
fput(file);
|
||||
out:
|
||||
fput_light(file, fput_needed);
|
||||
return error;
|
||||
}
|
||||
|
Reference in New Issue
Block a user