]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Btrfs: kfree correct pointer during mount option parsing
authorJosef Bacik <josef@redhat.com>
Thu, 25 Feb 2010 20:38:35 +0000 (20:38 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 13 Aug 2010 20:20:12 +0000 (13:20 -0700)
commit da495ecc0fb096b383754952a1c152147bc95b52 upstream.

We kstrdup the options string, but then strsep screws with the pointer,
so when we kfree() it, we're not giving it the right pointer.

Tested-by: Andy Lutomirski <luto@mit.edu>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Acked-by: Jeff Mahoney <jeffm@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
fs/btrfs/super.c

index 3f9b45704fcdfb83eeda6a55740c56de7a048ce5..a649305b205968e024a967555520581c00f3356e 100644 (file)
@@ -126,7 +126,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
 {
        struct btrfs_fs_info *info = root->fs_info;
        substring_t args[MAX_OPT_ARGS];
-       char *p, *num;
+       char *p, *num, *orig;
        int intarg;
        int ret = 0;
 
@@ -141,6 +141,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
        if (!options)
                return -ENOMEM;
 
+       orig = options;
 
        while ((p = strsep(&options, ",")) != NULL) {
                int token;
@@ -273,7 +274,7 @@ int btrfs_parse_options(struct btrfs_root *root, char *options)
                }
        }
 out:
-       kfree(options);
+       kfree(orig);
        return ret;
 }