|
@@ -140,18 +140,19 @@ long do_utimes(int dfd, const char __user *filename, struct timespec *times,
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
if (filename == NULL && dfd != AT_FDCWD) {
|
|
if (filename == NULL && dfd != AT_FDCWD) {
|
|
|
|
+ int fput_needed;
|
|
struct file *file;
|
|
struct file *file;
|
|
|
|
|
|
if (flags & AT_SYMLINK_NOFOLLOW)
|
|
if (flags & AT_SYMLINK_NOFOLLOW)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
- file = fget(dfd);
|
|
|
|
|
|
+ file = fget_light(dfd, &fput_needed);
|
|
error = -EBADF;
|
|
error = -EBADF;
|
|
if (!file)
|
|
if (!file)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
error = utimes_common(&file->f_path, times);
|
|
error = utimes_common(&file->f_path, times);
|
|
- fput(file);
|
|
|
|
|
|
+ fput_light(file, fput_needed);
|
|
} else {
|
|
} else {
|
|
struct path path;
|
|
struct path path;
|
|
int lookup_flags = 0;
|
|
int lookup_flags = 0;
|