提交 0b3974eb 编写于 作者: M Miklos Szeredi

security: add flags to rename hooks

Add flags to security_path_rename() and security_inode_rename() hooks.
Signed-off-by: NMiklos Szeredi <mszeredi@suse.cz>
Reviewed-by: NJ. Bruce Fields <bfields@redhat.com>
上级 0a7c3937
...@@ -391,7 +391,7 @@ static int cachefiles_bury_object(struct cachefiles_cache *cache, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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, ...@@ -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))))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册