]> Git Repo - J-linux.git/commitdiff
ata: libata-scsi: Fix ata_msense_control_spgt2()
authorDamien Le Moal <[email protected]>
Mon, 23 Sep 2024 09:06:46 +0000 (18:06 +0900)
committerDamien Le Moal <[email protected]>
Tue, 24 Sep 2024 07:56:21 +0000 (16:56 +0900)
ata_msense_control_spgt2() can be called even for devices that do not
support CDL when the user requests the ALL_SUB_MPAGES mode sense page,
but for such device, this will cause a NULL pointer dereference as
dev->cdl is NULL. Similarly, we should not return any data if
ata_msense_control_spgt2() is called when the user requested the
CDL_T2A_SUB_MPAGE or CDL_T2B_SUB_MPAGE pages for a device that does not
support CDL.

Avoid this potential NULL pointer dereference by checking if the device
support CDL on entry to ata_msense_control_spgt2() and return 0 if it
does not support CDL.

Reported-by: [email protected]
Tested-by: [email protected]
Fixes: 602bcf212637 ("ata: libata: Improve CDL resource management")
Signed-off-by: Damien Le Moal <[email protected]>
Reviewed-by: Hannes Reinecke <[email protected]>
drivers/ata/libata-scsi.c

index 061fe63497bfa8eba0cfb049eac6afe87b81702e..97c84b0ec4725d4b1c9cea2ece81d1210b1a5257 100644 (file)
@@ -2245,10 +2245,15 @@ static inline u16 ata_xlat_cdl_limit(u8 *buf)
 static unsigned int ata_msense_control_spgt2(struct ata_device *dev, u8 *buf,
                                             u8 spg)
 {
-       u8 *b, *cdl = dev->cdl->desc_log_buf, *desc;
+       u8 *b, *cdl, *desc;
        u32 policy;
        int i;
 
+       if (!(dev->flags & ATA_DFLAG_CDL) || !dev->cdl)
+               return 0;
+
+       cdl = dev->cdl->desc_log_buf;
+
        /*
         * Fill the subpage. The first four bytes of the T2A/T2B mode pages
         * are a header. The PAGE LENGTH field is the size of the page
This page took 0.044788 seconds and 4 git commands to generate.