lkml.org 
[lkml]   [2010]   [Jun]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] fs, ext4: Fix potential memory leak in ext4_fill_super
    Under heavy memory pressure we may hit out of memory
    situation and as result kstrdup'ed options will not be
    freed. Fix it.

    Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
    ---
    fs/ext4/super.c | 8 +++++---
    1 file changed, 5 insertions(+), 3 deletions(-)

    Index: linux-2.6.git/fs/ext4/super.c
    =====================================================================
    --- linux-2.6.git.orig/fs/ext4/super.c
    +++ linux-2.6.git/fs/ext4/super.c
    @@ -2448,7 +2448,7 @@ static int ext4_fill_super(struct super_
    struct inode *root;
    char *cp;
    const char *descr;
    - int ret = -EINVAL;
    + int ret = -ENOMEM;
    int blocksize;
    unsigned int db_count;
    unsigned int i;
    @@ -2459,13 +2459,13 @@ static int ext4_fill_super(struct super_

    sbi = kzalloc(sizeof(*sbi), GFP_KERNEL);
    if (!sbi)
    - return -ENOMEM;
    + goto out_free_orig;

    sbi->s_blockgroup_lock =
    kzalloc(sizeof(struct blockgroup_lock), GFP_KERNEL);
    if (!sbi->s_blockgroup_lock) {
    kfree(sbi);
    - return -ENOMEM;
    + goto out_free_orig;
    }
    sb->s_fs_info = sbi;
    sbi->s_mount_opt = 0;
    @@ -2482,6 +2482,7 @@ static int ext4_fill_super(struct super_
    for (cp = sb->s_id; (cp = strchr(cp, '/'));)
    *cp = '!';

    + ret = -EINVAL;
    blocksize = sb_min_blocksize(sb, EXT4_MIN_BLOCK_SIZE);
    if (!blocksize) {
    ext4_msg(sb, KERN_ERR, "unable to set blocksize");
    @@ -3093,6 +3094,7 @@ out_fail:
    kfree(sbi->s_blockgroup_lock);
    kfree(sbi);
    lock_kernel();
    +out_free_orig:
    kfree(orig_data);
    return ret;
    }

    \
     
     \ /
      Last update: 2010-06-16 17:35    [W:0.023 / U:0.984 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site