|
@@ -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;
|
|
|
}
|