introduce fd_file(), convert all accessors to it.
For any changes of struct fd representation we need to
turn existing accesses to fields into calls of wrappers.
Accesses to struct fd::flags are very few (3 in linux/file.h,
1 in net/socket.c, 3 in fs/overlayfs/file.c and 3 more in
explicit initializers).
Those can be dealt with in the commit converting to
new layout; accesses to struct fd::file are too many for that.
This commit converts (almost) all of f.file to
fd_file(f). It's not entirely mechanical ('file' is used as
a member name more than just in struct fd) and it does not
even attempt to distinguish the uses in pointer context from
those in boolean context; the latter will be eventually turned
into a separate helper (fd_empty()).
NOTE: mass conversion to fd_empty(), tempting as it
might be, is a bad idea; better do that piecewise in commit
that convert from fdget...() to CLASS(...).
[conflicts in fs/fhandle.c, kernel/bpf/syscall.c, mm/memcontrol.c
caught by git; fs/stat.c one got caught by git grep]
[fs/xattr.c conflict]
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
+5
-5
@@ -1916,10 +1916,10 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
|
||||
int err;
|
||||
|
||||
exe = fdget(fd);
|
||||
if (!exe.file)
|
||||
if (!fd_file(exe))
|
||||
return -EBADF;
|
||||
|
||||
inode = file_inode(exe.file);
|
||||
inode = file_inode(fd_file(exe));
|
||||
|
||||
/*
|
||||
* Because the original mm->exe_file points to executable file, make
|
||||
@@ -1927,14 +1927,14 @@ static int prctl_set_mm_exe_file(struct mm_struct *mm, unsigned int fd)
|
||||
* overall picture.
|
||||
*/
|
||||
err = -EACCES;
|
||||
if (!S_ISREG(inode->i_mode) || path_noexec(&exe.file->f_path))
|
||||
if (!S_ISREG(inode->i_mode) || path_noexec(&fd_file(exe)->f_path))
|
||||
goto exit;
|
||||
|
||||
err = file_permission(exe.file, MAY_EXEC);
|
||||
err = file_permission(fd_file(exe), MAY_EXEC);
|
||||
if (err)
|
||||
goto exit;
|
||||
|
||||
err = replace_mm_exe_file(mm, exe.file);
|
||||
err = replace_mm_exe_file(mm, fd_file(exe));
|
||||
exit:
|
||||
fdput(exe);
|
||||
return err;
|
||||
|
||||
Reference in New Issue
Block a user