]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: megaraid_sas: Protect more code with instance->reset_mutex
authorBart Van Assche <bvanassche@acm.org>
Mon, 23 Feb 2026 22:00:30 +0000 (14:00 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 28 Feb 2026 22:17:45 +0000 (17:17 -0500)
megasas_get_device_list() and megasas_get_snapdump_properties() may unlock
instance->reset_mutex indirectly. Hence, hold reset_mutex while calling
these functions.

Cc: Kashyap Desai <kashyap.desai@broadcom.com>
Cc: Sumit Saxena <sumit.saxena@broadcom.com>
Cc: Shivasharan S <shivasharan.srikanteshwara@broadcom.com>
Cc: Chandrakanth patil <chandrakanth.patil@broadcom.com>
Cc: James E.J. Bottomley <James.Bottomley@HansenPartnership.com>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: megaraidlinux.pdl@broadcom.com
Cc: linux-scsi@vger.kernel.org
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20260223220102.2158611-31-bart.vanassche@linux.dev
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/megaraid/megaraid_sas_base.c

index ac71ea4898b22879d536ee6bf94652cd67b9727f..ecd365d78ae3c14f4682d61063b6f216974daa7d 100644 (file)
@@ -6365,11 +6365,13 @@ static int megasas_init_fw(struct megasas_instance *instance)
 
        megasas_setup_jbod_map(instance);
 
-       if (megasas_get_device_list(instance) != SUCCESS) {
-               dev_err(&instance->pdev->dev,
-                       "%s: megasas_get_device_list failed\n",
-                       __func__);
-               goto fail_get_ld_pd_list;
+       scoped_guard(mutex, &instance->reset_mutex) {
+               if (megasas_get_device_list(instance) != SUCCESS) {
+                       dev_err(&instance->pdev->dev,
+                               "%s: megasas_get_device_list failed\n",
+                               __func__);
+                       goto fail_get_ld_pd_list;
+               }
        }
 
        /* stream detection initialization */
@@ -6468,7 +6470,8 @@ static int megasas_init_fw(struct megasas_instance *instance)
        }
 
        if (instance->snapdump_wait_time) {
-               megasas_get_snapdump_properties(instance);
+               scoped_guard(mutex, &instance->reset_mutex)
+                       megasas_get_snapdump_properties(instance);
                dev_info(&instance->pdev->dev, "Snap dump wait time\t: %d\n",
                         instance->snapdump_wait_time);
        }