lkml.org 
[lkml]   [2006]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] SELinux - fix hard link count for selinuxfs root directory
    A further fix is needed for selinuxfs link count management, to ensure 
    that the count is correct for the parent directory when a subdirectory is
    created. This is only required for the root directory currently, but the
    code has been updated for the general case.

    Please apply.

    Signed-off-by: James Morris <jmorris@namei.org>
    Acked-by: Stephen Smalley <sds@tycho.nsa.gov>

    ---

    security/selinux/selinuxfs.c | 14 +++++++++-----
    1 files changed, 9 insertions(+), 5 deletions(-)

    diff -purN -X dontdiff linux-2.6.16-rc4-mm2.o/security/selinux/selinuxfs.c linux-2.6.16-rc4-mm2.w/security/selinux/selinuxfs.c
    --- linux-2.6.16-rc4-mm2.o/security/selinux/selinuxfs.c 2006-02-25 00:29:32.000000000 -0500
    +++ linux-2.6.16-rc4-mm2.w/security/selinux/selinuxfs.c 2006-02-25 12:35:26.000000000 -0500
    @@ -1177,12 +1177,12 @@ out:
    return ret;
    }

    -static int sel_make_dir(struct super_block *sb, struct dentry *dentry)
    +static int sel_make_dir(struct inode *dir, struct dentry *dentry)
    {
    int ret = 0;
    struct inode *inode;

    - inode = sel_make_inode(sb, S_IFDIR | S_IRUGO | S_IXUGO);
    + inode = sel_make_inode(dir->i_sb, S_IFDIR | S_IRUGO | S_IXUGO);
    if (!inode) {
    ret = -ENOMEM;
    goto out;
    @@ -1192,6 +1192,8 @@ static int sel_make_dir(struct super_blo
    /* directory inodes start off with i_nlink == 2 (for "." entry) */
    inode->i_nlink++;
    d_add(dentry, inode);
    + /* bump link count on parent directory, too */
    + dir->i_nlink++;
    out:
    return ret;
    }
    @@ -1200,7 +1202,7 @@ static int sel_fill_super(struct super_b
    {
    int ret;
    struct dentry *dentry;
    - struct inode *inode;
    + struct inode *inode, *root_inode;
    struct inode_security_struct *isec;

    static struct tree_descr selinux_files[] = {
    @@ -1223,13 +1225,15 @@ static int sel_fill_super(struct super_b
    if (ret)
    goto err;

    + root_inode = sb->s_root->d_inode;
    +
    dentry = d_alloc_name(sb->s_root, BOOL_DIR_NAME);
    if (!dentry) {
    ret = -ENOMEM;
    goto err;
    }

    - ret = sel_make_dir(sb, dentry);
    + ret = sel_make_dir(root_inode, dentry);
    if (ret)
    goto err;

    @@ -1261,7 +1265,7 @@ static int sel_fill_super(struct super_b
    goto err;
    }

    - ret = sel_make_dir(sb, dentry);
    + ret = sel_make_dir(root_inode, dentry);
    if (ret)
    goto err;

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2006-02-27 21:26    [W:0.023 / U:60.696 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site