Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs: file_remove_privs_flags()

Rename and export __file_remove_privs(); for a buffered write path that
doesn't take the inode lock we need to be able to check if the operation
needs to do work first.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>
Cc: Christian Brauner <brauner@kernel.org>

+5 -3
+4 -3
fs/inode.c
··· 2031 2031 return notify_change(idmap, dentry, &newattrs, NULL); 2032 2032 } 2033 2033 2034 - static int __file_remove_privs(struct file *file, unsigned int flags) 2034 + int file_remove_privs_flags(struct file *file, unsigned int flags) 2035 2035 { 2036 2036 struct dentry *dentry = file_dentry(file); 2037 2037 struct inode *inode = file_inode(file); ··· 2056 2056 inode_has_no_xattr(inode); 2057 2057 return error; 2058 2058 } 2059 + EXPORT_SYMBOL_GPL(file_remove_privs_flags); 2059 2060 2060 2061 /** 2061 2062 * file_remove_privs - remove special file privileges (suid, capabilities) ··· 2069 2068 */ 2070 2069 int file_remove_privs(struct file *file) 2071 2070 { 2072 - return __file_remove_privs(file, 0); 2071 + return file_remove_privs_flags(file, 0); 2073 2072 } 2074 2073 EXPORT_SYMBOL(file_remove_privs); 2075 2074 ··· 2162 2161 * Clear the security bits if the process is not being run by root. 2163 2162 * This keeps people from modifying setuid and setgid binaries. 2164 2163 */ 2165 - ret = __file_remove_privs(file, flags); 2164 + ret = file_remove_privs_flags(file, flags); 2166 2165 if (ret) 2167 2166 return ret; 2168 2167
+1
include/linux/fs.h
··· 3004 3004 extern struct inode *new_inode(struct super_block *sb); 3005 3005 extern void free_inode_nonrcu(struct inode *inode); 3006 3006 extern int setattr_should_drop_suidgid(struct mnt_idmap *, struct inode *); 3007 + extern int file_remove_privs_flags(struct file *file, unsigned int flags); 3007 3008 extern int file_remove_privs(struct file *); 3008 3009 int setattr_should_drop_sgid(struct mnt_idmap *idmap, 3009 3010 const struct inode *inode);