]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] d_alloc_root() fixes: adfs
authorAlexander Viro <viro@www.linux.org.uk>
Thu, 4 Mar 2004 05:21:43 +0000 (21:21 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Thu, 4 Mar 2004 05:21:43 +0000 (21:21 -0800)
 - leak of root inode if d_alloc_root() fails.

fs/adfs/super.c

index add13abbc08760c965d1106714fb7c8623d02b5c..eba980885e8d5653cc07f86f81317939bda738bb 100644 (file)
@@ -333,6 +333,7 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
        struct object_info root_obj;
        unsigned char *b_data;
        struct adfs_sb_info *asb;
+       struct inode *root;
 
        asb = kmalloc(sizeof(*asb), GFP_KERNEL);
        if (!asb)
@@ -443,10 +444,11 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)
                asb->s_namelen = ADFS_F_NAME_LEN;
        }
 
-       sb->s_root = d_alloc_root(adfs_iget(sb, &root_obj));
+       root = adfs_iget(sb, &root_obj);
+       sb->s_root = d_alloc_root(root);
        if (!sb->s_root) {
                int i;
-
+               iput(root);
                for (i = 0; i < asb->s_map_size; i++)
                        brelse(asb->s_map[i].dm_bh);
                kfree(asb->s_map);