mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
Fix permission checking for the new utimensat() system call
Commit 1c710c896e added the utimensat()
system call, but didn't handle the case of checking for the writability
of the target right, when the target was a file descriptor, not a
filename.
We cannot use vfs_permission(MAY_WRITE) for that case, and need to
simply check whether the file descriptor is writable. The oops from
using the wrong function was noticed and narrowed down by Markus
Trippelsdorf.
Cc: Ulrich Drepper <[email protected]>
Cc: Markus Trippelsdorf <[email protected]>
Cc: Andrew Morton <[email protected]>
Acked-by: Al Viro <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
4e99325b46
commit
1e5de2837c
1 changed files with 10 additions and 3 deletions
13
fs/utimes.c
13
fs/utimes.c
|
|
@ -106,9 +106,16 @@ long do_utimes(int dfd, char __user *filename, struct timespec *times, int flags
|
|||
if (IS_IMMUTABLE(inode))
|
||||
goto dput_and_out;
|
||||
|
||||
if (current->fsuid != inode->i_uid &&
|
||||
(error = vfs_permission(&nd, MAY_WRITE)) != 0)
|
||||
goto dput_and_out;
|
||||
if (current->fsuid != inode->i_uid) {
|
||||
if (f) {
|
||||
if (!(f->f_mode & FMODE_WRITE))
|
||||
goto dput_and_out;
|
||||
} else {
|
||||
error = vfs_permission(&nd, MAY_WRITE);
|
||||
if (error)
|
||||
goto dput_and_out;
|
||||
}
|
||||
}
|
||||
}
|
||||
mutex_lock(&inode->i_mutex);
|
||||
error = notify_change(dentry, &newattrs);
|
||||
|
|
|
|||
Loading…
Reference in a new issue