Merge tag 'block5.9-2020-10-08' of git://git.kernel.dk/linux-block
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 9 Oct 2020 01:48:34 +0000 (18:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 9 Oct 2020 01:48:34 +0000 (18:48 -0700)
Pull block fixes from Jens Axboe:
 "A few fixes that should go into this release:

   - NVMe controller error path reference fix (Chaitanya)

   - Fix regression with IBM partitions on non-dasd devices (Christoph)

   - Fix a missing clear in the compat CDROM packet structure (Peilin)"

* tag 'block5.9-2020-10-08' of git://git.kernel.dk/linux-block:
  partitions/ibm: fix non-DASD devices
  nvme-core: put ctrl ref when module ref get fail
  block/scsi-ioctl: Fix kernel-infoleak in scsi_put_cdrom_generic_arg()

block/partitions/ibm.c
block/scsi_ioctl.c
drivers/nvme/host/core.c

index d6e18df..4b044e6 100644 (file)
@@ -305,8 +305,6 @@ int ibm_partition(struct parsed_partitions *state)
        if (!disk->fops->getgeo)
                goto out_exit;
        fn = symbol_get(dasd_biodasdinfo);
-       if (!fn)
-               goto out_exit;
        blocksize = bdev_logical_block_size(bdev);
        if (blocksize <= 0)
                goto out_symbol;
@@ -326,7 +324,7 @@ int ibm_partition(struct parsed_partitions *state)
        geo->start = get_start_sect(bdev);
        if (disk->fops->getgeo(bdev, geo))
                goto out_freeall;
-       if (fn(disk, info)) {
+       if (!fn || fn(disk, info)) {
                kfree(info);
                info = NULL;
        }
@@ -370,7 +368,8 @@ out_nolab:
 out_nogeo:
        kfree(info);
 out_symbol:
-       symbol_put(dasd_biodasdinfo);
+       if (fn)
+               symbol_put(dasd_biodasdinfo);
 out_exit:
        return res;
 }
index ef722f0..7210840 100644 (file)
@@ -651,6 +651,7 @@ struct compat_cdrom_generic_command {
        compat_int_t    stat;
        compat_caddr_t  sense;
        unsigned char   data_direction;
+       unsigned char   pad[3];
        compat_int_t    quiet;
        compat_int_t    timeout;
        compat_caddr_t  reserved[1];
index 8f9d61e..893e296 100644 (file)
@@ -3265,8 +3265,10 @@ static int nvme_dev_open(struct inode *inode, struct file *file)
        }
 
        nvme_get_ctrl(ctrl);
-       if (!try_module_get(ctrl->ops->module))
+       if (!try_module_get(ctrl->ops->module)) {
+               nvme_put_ctrl(ctrl);
                return -EINVAL;
+       }
 
        file->private_data = ctrl;
        return 0;