Btrfs: fix btrfs_ioctl_dev_info() crash on missing device
authorStefan Behrens <sbehrens@giantdisaster.de>
Mon, 19 Mar 2012 15:17:22 +0000 (16:17 +0100)
committerDavid Sterba <dsterba@suse.cz>
Wed, 18 Apr 2012 17:22:35 +0000 (19:22 +0200)
When a filesystem is mounted with the degraded option, it is
possible that some of the devices are not there.
btrfs_ioctl_dev_info() crashs in this case because the device
name is a NULL pointer. This ioctl was only used for scrub.

Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de>

fs/btrfs/ioctl.c

index 18cc23d..14f8e1f 100644 (file)
@@ -2262,7 +2262,10 @@ static long btrfs_ioctl_dev_info(struct btrfs_root *root, void __user *arg)
        di_args->bytes_used = dev->bytes_used;
        di_args->total_bytes = dev->total_bytes;
        memcpy(di_args->uuid, dev->uuid, sizeof(di_args->uuid));
-       strncpy(di_args->path, dev->name, sizeof(di_args->path));
+       if (dev->name)
+               strncpy(di_args->path, dev->name, sizeof(di_args->path));
+       else
+               di_args->path[0] = '\0';
 
 out:
        if (ret == 0 && copy_to_user(arg, di_args, sizeof(*di_args)))