security: add flags to rename hooks
authorMiklos Szeredi <mszeredi@suse.cz>
Tue, 1 Apr 2014 15:08:43 +0000 (17:08 +0200)
committerMiklos Szeredi <mszeredi@suse.cz>
Tue, 1 Apr 2014 15:08:43 +0000 (17:08 +0200)
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>
fs/cachefiles/namei.c
fs/namei.c
include/linux/security.h
security/security.c

index 31088a9693519a7944fb950eed0c951a8b94023a..6494d9f673aa51490a59694d600bd8a7101559bf 100644 (file)
@@ -391,7 +391,7 @@ try_again:
        path.dentry = dir;
        path_to_graveyard.mnt = cache->mnt;
        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) {
                cachefiles_io_error(cache, "Rename security error %d", ret);
        } else {
index 0e9d186b7f775d6cda61a3d517c2240c8a090ef3..4096d589bb3fa66c2faf77f95648b4fed026d25f 100644 (file)
@@ -4062,7 +4062,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
                        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)
                return error;
 
@@ -4217,7 +4218,7 @@ retry_deleg:
                goto exit5;
 
        error = security_path_rename(&oldnd.path, old_dentry,
-                                    &newnd.path, new_dentry);
+                                    &newnd.path, new_dentry, flags);
        if (error)
                goto exit5;
        error = vfs_rename(old_dir->d_inode, old_dentry,
index 2fc42d191f79f77236b843a70775129c01207333..6478ce3252c7d83fdd853ff2797a54d3cc591db6 100644 (file)
@@ -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_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,
-                         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_follow_link(struct dentry *dentry, struct nameidata *nd);
 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,
                                         struct dentry *old_dentry,
                                         struct inode *new_dir,
-                                        struct dentry *new_dentry)
+                                        struct dentry *new_dentry,
+                                        unsigned int flags)
 {
        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,
                       struct dentry *new_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_chown(struct path *path, kuid_t uid, kgid_t gid);
 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,
                                       struct dentry *old_dentry,
                                       struct path *new_dir,
-                                      struct dentry *new_dentry)
+                                      struct dentry *new_dentry,
+                                      unsigned int flags)
 {
        return 0;
 }
index 919cad93ac82fa2fa7c017b5c85353ca8ac6818e..284fbc99aa9d319fe05e40fcffeb7d22e89a0eb3 100644 (file)
@@ -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,
-                        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) ||
                     (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,
-                          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) ||
             (new_dentry->d_inode && IS_PRIVATE(new_dentry->d_inode))))