scsi: sg: Fix get_user() in call sg_scsi_ioctl()
authorKirill A. Shutemov <kirill.shutemov@linux.intel.com>
Thu, 17 Nov 2022 23:23:04 +0000 (02:23 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 26 Nov 2022 03:13:22 +0000 (03:13 +0000)
get_user() expects the pointer to be pointer-to-simple-variable type, but
sic->data is array of 'unsigned char'. It violates get_user() contracts.

Explicitly take pointer to the first element of the array. It matches
current behaviour.

This is preparation for fixing sparse warnings caused by Linear Address
Masking patchset.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Link: https://lore.kernel.org/r/20221117232304.1544-1-kirill.shutemov@linux.intel.com
Cc: "James E.J. Bottomley" <jejb@linux.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_ioctl.c

index 2d20da55fb64086ebc66d4702b37ac28c7cc1bea..fdd47565a3115daa33d0d1929108642e83f431c1 100644 (file)
@@ -519,7 +519,7 @@ static int sg_scsi_ioctl(struct request_queue *q, fmode_t mode,
                return -EFAULT;
        if (in_len > PAGE_SIZE || out_len > PAGE_SIZE)
                return -EINVAL;
-       if (get_user(opcode, sic->data))
+       if (get_user(opcode, &sic->data[0]))
                return -EFAULT;
 
        bytes = max(in_len, out_len);