btrfs: trivial fix, a potential memory leak in btrfs_parse_early_options()
authorJeff Liu <jeff.liu@oracle.com>
Wed, 14 Sep 2011 06:11:21 +0000 (14:11 +0800)
committerDavid Sterba <dsterba@suse.cz>
Thu, 20 Oct 2011 16:10:38 +0000 (18:10 +0200)
Signed-off-by: Jie Liu <jeff.liu@oracle.com>
fs/btrfs/super.c

index 266d1f35465d163c42db88e1a100819e3b6bd435..09ce951666ea93c9ebb8d1bcc4cc5d1087b91b04 100644 (file)
@@ -419,7 +419,7 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags,
                u64 *subvol_rootid, struct btrfs_fs_devices **fs_devices)
 {
        substring_t args[MAX_OPT_ARGS];
-       char *opts, *orig, *p;
+       char *device_name, *opts, *orig, *p;
        int error = 0;
        int intarg;
 
@@ -470,8 +470,14 @@ static int btrfs_parse_early_options(const char *options, fmode_t flags,
                        }
                        break;
                case Opt_device:
-                       error = btrfs_scan_one_device(match_strdup(&args[0]),
+                       device_name = match_strdup(&args[0]);
+                       if (!device_name) {
+                               error = -ENOMEM;
+                               goto out;
+                       }
+                       error = btrfs_scan_one_device(device_name,
                                        flags, holder, fs_devices);
+                       kfree(device_name);
                        if (error)
                                goto out;
                        break;