]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: pm8001: Reject non-fatal dump when controller is crashed
authorKumar Meiyappan <kumar.meiyappan@microchip.com>
Thu, 16 Apr 2026 15:46:50 +0000 (15:46 +0000)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 15 May 2026 02:10:23 +0000 (22:10 -0400)
pm80xx_get_non_fatal_dump() can be called even after the controller has
entered a fatal error state. In that case the forensic memory contents
are not safe to access for a non-fatal dump request, and attempting to
do so can trigger a call trace.

Check controller_fatal_error before reading the non-fatal dump buffer
and return -EINVAL when the controller is already in a crashed state.

This prevents non-fatal dump collection from running in an invalid
controller state.

Signed-off-by: Kumar Meiyappan <kumar.meiyappan@microchip.com>
Signed-off-by: Sagar Biradar <sagar.biradar@microchip.com>
Link: https://patch.msgid.link/20260416154650.415624-1-sagar.biradar@microchip.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/pm8001/pm80xx_hwi.c

index 954f307352e615ee3713ed1fb74910ee69644b48..2c0fa7ab33d224b9b00e30b838b6efa83e3b1a62 100644 (file)
@@ -401,6 +401,13 @@ ssize_t pm80xx_get_non_fatal_dump(struct device *cdev,
        char *buf_copy = buf;
 
        temp = (u32 *)pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr;
+
+       if (pm8001_ha->controller_fatal_error) {
+               pm8001_dbg(pm8001_ha, FAIL,
+                          "non-fatal dump not available in fatal error state\n");
+               return -EINVAL;
+       }
+
        if (++pm8001_ha->non_fatal_count == 1) {
                if (pm8001_ha->chip_id == chip_8001) {
                        snprintf(pm8001_ha->forensic_info.data_buf.direct_data,