]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: pm8001: Reject firmware update in fatal error state
authorKumar Meiyappan <kumar.meiyappan@microchip.com>
Thu, 16 Apr 2026 15:37:57 +0000 (15:37 +0000)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 15 May 2026 02:09:30 +0000 (22:09 -0400)
pm8001_store_update_fw() allows a firmware update request even when the
controller has already entered a fatal error state.

Firmware update is not valid once the controller is in that state, and
attempting it can lead to a call trace. Reject the request early by
checking controller_fatal_error, set the firmware status to
FAIL_PARAMETERS, and return -EINVAL.

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

index cbfda8c04e956a3e7175dabdc15a235fcc6bba08..bb38b2d63acb87489783ae2240e6fa684fd0ab10 100644 (file)
@@ -826,6 +826,14 @@ static ssize_t pm8001_store_update_fw(struct device *cdev,
                goto out;
        }
 
+       if (pm8001_ha->controller_fatal_error) {
+               pm8001_dbg(pm8001_ha, FAIL,
+                          "controller in fatal error state, firmware update rejected\n");
+               pm8001_ha->fw_status = FAIL_PARAMETERS;
+               ret = -EINVAL;
+               goto out;
+       }
+
        for (i = 0; flash_command_table[i].code != FLASH_CMD_NONE; i++) {
                if (!memcmp(flash_command_table[i].command,
                                 cmd_ptr, strlen(cmd_ptr))) {