Skip to content

Commit 66a67c8

Browse files
author
Kent Overstreet
committed
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 <[email protected]> Cc: Alexander Viro <[email protected]> Cc: Christian Brauner <[email protected]>
1 parent 7efa287 commit 66a67c8

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

fs/inode.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2031,7 +2031,7 @@ static int __remove_privs(struct mnt_idmap *idmap,
20312031
return notify_change(idmap, dentry, &newattrs, NULL);
20322032
}
20332033

2034-
static int __file_remove_privs(struct file *file, unsigned int flags)
2034+
int file_remove_privs_flags(struct file *file, unsigned int flags)
20352035
{
20362036
struct dentry *dentry = file_dentry(file);
20372037
struct inode *inode = file_inode(file);
@@ -2056,6 +2056,7 @@ static int __file_remove_privs(struct file *file, unsigned int flags)
20562056
inode_has_no_xattr(inode);
20572057
return error;
20582058
}
2059+
EXPORT_SYMBOL_GPL(file_remove_privs_flags);
20592060

20602061
/**
20612062
* file_remove_privs - remove special file privileges (suid, capabilities)
@@ -2068,7 +2069,7 @@ static int __file_remove_privs(struct file *file, unsigned int flags)
20682069
*/
20692070
int file_remove_privs(struct file *file)
20702071
{
2071-
return __file_remove_privs(file, 0);
2072+
return file_remove_privs_flags(file, 0);
20722073
}
20732074
EXPORT_SYMBOL(file_remove_privs);
20742075

@@ -2161,7 +2162,7 @@ static int file_modified_flags(struct file *file, int flags)
21612162
* Clear the security bits if the process is not being run by root.
21622163
* This keeps people from modifying setuid and setgid binaries.
21632164
*/
2164-
ret = __file_remove_privs(file, flags);
2165+
ret = file_remove_privs_flags(file, flags);
21652166
if (ret)
21662167
return ret;
21672168

include/linux/fs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3004,6 +3004,7 @@ extern struct inode *new_inode_pseudo(struct super_block *sb);
30043004
extern struct inode *new_inode(struct super_block *sb);
30053005
extern void free_inode_nonrcu(struct inode *inode);
30063006
extern int setattr_should_drop_suidgid(struct mnt_idmap *, struct inode *);
3007+
extern int file_remove_privs_flags(struct file *file, unsigned int flags);
30073008
extern int file_remove_privs(struct file *);
30083009
int setattr_should_drop_sgid(struct mnt_idmap *idmap,
30093010
const struct inode *inode);

0 commit comments

Comments
 (0)