mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-06 05:13:18 +00:00
security: add flags to rename hooks
Add flags to security_path_rename() and security_inode_rename() hooks. Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> Reviewed-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
0a7c3937a1
commit
0b3974eb04
@ -391,7 +391,7 @@ static int cachefiles_bury_object(struct cachefiles_cache *cache,
|
|||||||
path.dentry = dir;
|
path.dentry = dir;
|
||||||
path_to_graveyard.mnt = cache->mnt;
|
path_to_graveyard.mnt = cache->mnt;
|
||||||
path_to_graveyard.dentry = cache->graveyard;
|
path_to_graveyard.dentry = cache->graveyard;
|
||||||
ret = security_path_rename(&path, rep, &path_to_graveyard, grave);
|
ret = security_path_rename(&path, rep, &path_to_graveyard, grave, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
cachefiles_io_error(cache, "Rename security error %d", ret);
|
cachefiles_io_error(cache, "Rename security error %d", ret);
|
||||||
} else {
|
} else {
|
||||||
|
@ -4062,7 +4062,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
|
|||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry);
|
error = security_inode_rename(old_dir, old_dentry, new_dir, new_dentry,
|
||||||
|
flags);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
@ -4217,7 +4218,7 @@ SYSCALL_DEFINE5(renameat2, int, olddfd, const char __user *, oldname,
|
|||||||
goto exit5;
|
goto exit5;
|
||||||
|
|
||||||
error = security_path_rename(&oldnd.path, old_dentry,
|
error = security_path_rename(&oldnd.path, old_dentry,
|
||||||
&newnd.path, new_dentry);
|
&newnd.path, new_dentry, flags);
|
||||||
if (error)
|
if (error)
|
||||||
goto exit5;
|
goto exit5;
|
||||||
error = vfs_rename(old_dir->d_inode, old_dentry,
|
error = vfs_rename(old_dir->d_inode, old_dentry,
|
||||||
|
@ -1793,7 +1793,8 @@ int security_inode_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
|
|||||||
int security_inode_rmdir(struct inode *dir, struct dentry *dentry);
|
int security_inode_rmdir(struct inode *dir, struct dentry *dentry);
|
||||||
int security_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev);
|
int security_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev);
|
||||||
int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry,
|
int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
struct inode *new_dir, struct dentry *new_dentry);
|
struct inode *new_dir, struct dentry *new_dentry,
|
||||||
|
unsigned int flags);
|
||||||
int security_inode_readlink(struct dentry *dentry);
|
int security_inode_readlink(struct dentry *dentry);
|
||||||
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd);
|
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd);
|
||||||
int security_inode_permission(struct inode *inode, int mask);
|
int security_inode_permission(struct inode *inode, int mask);
|
||||||
@ -2161,7 +2162,8 @@ static inline int security_inode_mknod(struct inode *dir,
|
|||||||
static inline int security_inode_rename(struct inode *old_dir,
|
static inline int security_inode_rename(struct inode *old_dir,
|
||||||
struct dentry *old_dentry,
|
struct dentry *old_dentry,
|
||||||
struct inode *new_dir,
|
struct inode *new_dir,
|
||||||
struct dentry *new_dentry)
|
struct dentry *new_dentry,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -2955,7 +2957,8 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
|
|||||||
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||||
struct dentry *new_dentry);
|
struct dentry *new_dentry);
|
||||||
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||||
struct path *new_dir, struct dentry *new_dentry);
|
struct path *new_dir, struct dentry *new_dentry,
|
||||||
|
unsigned int flags);
|
||||||
int security_path_chmod(struct path *path, umode_t mode);
|
int security_path_chmod(struct path *path, umode_t mode);
|
||||||
int security_path_chown(struct path *path, kuid_t uid, kgid_t gid);
|
int security_path_chown(struct path *path, kuid_t uid, kgid_t gid);
|
||||||
int security_path_chroot(struct path *path);
|
int security_path_chroot(struct path *path);
|
||||||
@ -3003,7 +3006,8 @@ static inline int security_path_link(struct dentry *old_dentry,
|
|||||||
static inline int security_path_rename(struct path *old_dir,
|
static inline int security_path_rename(struct path *old_dir,
|
||||||
struct dentry *old_dentry,
|
struct dentry *old_dentry,
|
||||||
struct path *new_dir,
|
struct path *new_dir,
|
||||||
struct dentry *new_dentry)
|
struct dentry *new_dentry,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -433,7 +433,8 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||||
struct path *new_dir, struct dentry *new_dentry)
|
struct path *new_dir, struct dentry *new_dentry,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
if (unlikely(IS_PRIVATE(old_dentry->d_inode) ||
|
if (unlikely(IS_PRIVATE(old_dentry->d_inode) ||
|
||||||
(new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode))))
|
(new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode))))
|
||||||
@ -524,7 +525,8 @@ int security_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry,
|
int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry,
|
||||||
struct inode *new_dir, struct dentry *new_dentry)
|
struct inode *new_dir, struct dentry *new_dentry,
|
||||||
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
if (unlikely(IS_PRIVATE(old_dentry->d_inode) ||
|
if (unlikely(IS_PRIVATE(old_dentry->d_inode) ||
|
||||||
(new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode))))
|
(new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode))))
|
||||||
|
Loading…
Reference in New Issue
Block a user