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>
This commit is contained in:
parent
7efa287526
commit
66a67c860c
|
@ -2031,7 +2031,7 @@ static int __remove_privs(struct mnt_idmap *idmap,
|
|||
return notify_change(idmap, dentry, &newattrs, NULL);
|
||||
}
|
||||
|
||||
static int __file_remove_privs(struct file *file, unsigned int flags)
|
||||
int file_remove_privs_flags(struct file *file, unsigned int flags)
|
||||
{
|
||||
struct dentry *dentry = file_dentry(file);
|
||||
struct inode *inode = file_inode(file);
|
||||
|
@ -2056,6 +2056,7 @@ static int __file_remove_privs(struct file *file, unsigned int flags)
|
|||
inode_has_no_xattr(inode);
|
||||
return error;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(file_remove_privs_flags);
|
||||
|
||||
/**
|
||||
* file_remove_privs - remove special file privileges (suid, capabilities)
|
||||
|
@ -2068,7 +2069,7 @@ static int __file_remove_privs(struct file *file, unsigned int flags)
|
|||
*/
|
||||
int file_remove_privs(struct file *file)
|
||||
{
|
||||
return __file_remove_privs(file, 0);
|
||||
return file_remove_privs_flags(file, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(file_remove_privs);
|
||||
|
||||
|
@ -2161,7 +2162,7 @@ static int file_modified_flags(struct file *file, int flags)
|
|||
* Clear the security bits if the process is not being run by root.
|
||||
* This keeps people from modifying setuid and setgid binaries.
|
||||
*/
|
||||
ret = __file_remove_privs(file, flags);
|
||||
ret = file_remove_privs_flags(file, flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -3004,6 +3004,7 @@ extern struct inode *new_inode_pseudo(struct super_block *sb);
|
|||
extern struct inode *new_inode(struct super_block *sb);
|
||||
extern void free_inode_nonrcu(struct inode *inode);
|
||||
extern int setattr_should_drop_suidgid(struct mnt_idmap *, struct inode *);
|
||||
extern int file_remove_privs_flags(struct file *file, unsigned int flags);
|
||||
extern int file_remove_privs(struct file *);
|
||||
int setattr_should_drop_sgid(struct mnt_idmap *idmap,
|
||||
const struct inode *inode);
|
||||
|
|
Loading…
Reference in New Issue