summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKumar Meiyappan <kumar.meiyappan@microchip.com>2026-04-16 18:37:57 +0300
committerMartin K. Petersen <martin.petersen@oracle.com>2026-05-15 05:09:30 +0300
commit2a8fbcfb04aa9db189bfa3842d4f586aecd0e631 (patch)
tree389b381edc89e0a6e1a186892cac5843480e1f71
parent67b85a88265df19f049241d8c00571a5408f4eeb (diff)
downloadlinux-2a8fbcfb04aa9db189bfa3842d4f586aecd0e631.tar.xz
scsi: pm8001: Reject firmware update in fatal error state
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>
-rw-r--r--drivers/scsi/pm8001/pm8001_ctl.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/scsi/pm8001/pm8001_ctl.c b/drivers/scsi/pm8001/pm8001_ctl.c
index cbfda8c04e95..bb38b2d63acb 100644
--- a/drivers/scsi/pm8001/pm8001_ctl.c
+++ b/drivers/scsi/pm8001/pm8001_ctl.c
@@ -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))) {