aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext3/namei.c
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2011-02-01 11:05:39 -0500
committerEric Paris <eparis@redhat.com>2011-02-01 11:12:29 -0500
commit2a7dba391e5628ad665ce84ef9a6648da541ebab (patch)
treeba0722bd74d2c883dbda7ff721850bab411cac04 /fs/ext3/namei.c
parent821404434f3324bf23f545050ff64055a149766e (diff)
fs/vfs/security: pass last path component to LSM on inode creation
SELinux would like to implement a new labeling behavior of newly created inodes. We currently label new inodes based on the parent and the creating process. This new behavior would also take into account the name of the new object when deciding the new label. This is not the (supposed) full path, just the last component of the path. This is very useful because creating /etc/shadow is different than creating /etc/passwd but the kernel hooks are unable to differentiate these operations. We currently require that userspace realize it is doing some difficult operation like that and than userspace jumps through SELinux hoops to get things set up correctly. This patch does not implement new behavior, that is obviously contained in a seperate SELinux patch, but it does pass the needed name down to the correct LSM hook. If no such name exists it is fine to pass NULL. Signed-off-by: Eric Paris <eparis@redhat.com>
Diffstat (limited to 'fs/ext3/namei.c')
-rw-r--r--fs/ext3/namei.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c
index bce9dce639b8..a900033efcce 100644
--- a/fs/ext3/namei.c
+++ b/fs/ext3/namei.c
@@ -1707,7 +1707,7 @@ retry:
1707 if (IS_DIRSYNC(dir)) 1707 if (IS_DIRSYNC(dir))
1708 handle->h_sync = 1; 1708 handle->h_sync = 1;
1709 1709
1710 inode = ext3_new_inode (handle, dir, mode); 1710 inode = ext3_new_inode (handle, dir, &dentry->d_name, mode);
1711 err = PTR_ERR(inode); 1711 err = PTR_ERR(inode);
1712 if (!IS_ERR(inode)) { 1712 if (!IS_ERR(inode)) {
1713 inode->i_op = &ext3_file_inode_operations; 1713 inode->i_op = &ext3_file_inode_operations;
@@ -1743,7 +1743,7 @@ retry:
1743 if (IS_DIRSYNC(dir)) 1743 if (IS_DIRSYNC(dir))
1744 handle->h_sync = 1; 1744 handle->h_sync = 1;
1745 1745
1746 inode = ext3_new_inode (handle, dir, mode); 1746 inode = ext3_new_inode (handle, dir, &dentry->d_name, mode);
1747 err = PTR_ERR(inode); 1747 err = PTR_ERR(inode);
1748 if (!IS_ERR(inode)) { 1748 if (!IS_ERR(inode)) {
1749 init_special_inode(inode, inode->i_mode, rdev); 1749 init_special_inode(inode, inode->i_mode, rdev);
@@ -1781,7 +1781,7 @@ retry:
1781 if (IS_DIRSYNC(dir)) 1781 if (IS_DIRSYNC(dir))
1782 handle->h_sync = 1; 1782 handle->h_sync = 1;
1783 1783
1784 inode = ext3_new_inode (handle, dir, S_IFDIR | mode); 1784 inode = ext3_new_inode (handle, dir, &dentry->d_name, S_IFDIR | mode);
1785 err = PTR_ERR(inode); 1785 err = PTR_ERR(inode);
1786 if (IS_ERR(inode)) 1786 if (IS_ERR(inode))
1787 goto out_stop; 1787 goto out_stop;
@@ -2195,7 +2195,7 @@ retry:
2195 if (IS_DIRSYNC(dir)) 2195 if (IS_DIRSYNC(dir))
2196 handle->h_sync = 1; 2196 handle->h_sync = 1;
2197 2197
2198 inode = ext3_new_inode (handle, dir, S_IFLNK|S_IRWXUGO); 2198 inode = ext3_new_inode (handle, dir, &dentry->d_name, S_IFLNK|S_IRWXUGO);
2199 err = PTR_ERR(inode); 2199 err = PTR_ERR(inode);
2200 if (IS_ERR(inode)) 2200 if (IS_ERR(inode))
2201 goto out_stop; 2201 goto out_stop;