scsi: target: core: Fix memory leak in preempt_and_abort
authorDmitry Bogdanov <d.bogdanov@yadro.com>
Fri, 9 Sep 2022 09:04:23 +0000 (12:04 +0300)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 1 Oct 2022 09:03:57 +0000 (05:03 -0400)
Always release preempt_and_abort_list to avoid memory leak of
t10_pr_registration objects in it.

Link: https://lore.kernel.org/r/20220909090425.14479-3-d.bogdanov@yadro.com
Reviewed-by: Mike Christie <michael.christie@oracle.com>
Signed-off-by: Dmitry Bogdanov <d.bogdanov@yadro.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/target/target_core_pr.c

index 1521a97ddac25cfd0e5207a44b9598c0eeb48d1c..e3869576f254f016d9d99c658f469201071904ec 100644 (file)
@@ -2956,13 +2956,14 @@ core_scsi3_pro_preempt(struct se_cmd *cmd, int type, int scope, u64 res_key,
                        __core_scsi3_complete_pro_preempt(dev, pr_reg_n,
                                (preempt_type == PREEMPT_AND_ABORT) ? &preempt_and_abort_list : NULL,
                                type, scope, preempt_type);
-
-                       if (preempt_type == PREEMPT_AND_ABORT)
-                               core_scsi3_release_preempt_and_abort(
-                                       &preempt_and_abort_list, pr_reg_n);
                }
+
                spin_unlock(&dev->dev_reservation_lock);
 
+               if (preempt_type == PREEMPT_AND_ABORT)
+                       core_scsi3_release_preempt_and_abort(
+                               &preempt_and_abort_list, pr_reg_n);
+
                if (pr_tmpl->pr_aptpl_active)
                        core_scsi3_update_and_write_aptpl(cmd->se_dev, true);