[IA64] sync compat getdents
Add VERIFY_WRITE check in the beginning like compat_sys_getdents() (EINVAL vs EFAULT). Signed-off-by: Alexandr Andreev <aandreev@openvz.org> Signed-off-by: Alexey Dobriyan <adobriyan@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
committed by
Tony Luck
parent
a27e5a13d5
commit
50157b09b3
@@ -1267,6 +1267,10 @@ sys32_getdents (unsigned int fd, struct compat_dirent __user *dirent, unsigned i
|
|||||||
struct getdents32_callback buf;
|
struct getdents32_callback buf;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
error = -EFAULT;
|
||||||
|
if (!access_ok(VERIFY_WRITE, dirent, count))
|
||||||
|
goto out;
|
||||||
|
|
||||||
error = -EBADF;
|
error = -EBADF;
|
||||||
file = fget(fd);
|
file = fget(fd);
|
||||||
if (!file)
|
if (!file)
|
||||||
@@ -1283,10 +1287,10 @@ sys32_getdents (unsigned int fd, struct compat_dirent __user *dirent, unsigned i
|
|||||||
error = buf.error;
|
error = buf.error;
|
||||||
lastdirent = buf.previous;
|
lastdirent = buf.previous;
|
||||||
if (lastdirent) {
|
if (lastdirent) {
|
||||||
error = -EINVAL;
|
|
||||||
if (put_user(file->f_pos, &lastdirent->d_off))
|
if (put_user(file->f_pos, &lastdirent->d_off))
|
||||||
goto out_putf;
|
error = -EFAULT;
|
||||||
error = count - buf.count;
|
else
|
||||||
|
error = count - buf.count;
|
||||||
}
|
}
|
||||||
|
|
||||||
out_putf:
|
out_putf:
|
||||||
|
Reference in New Issue
Block a user