[PATCH] target: Fix use-after-free in core_scsi3_emulate_pro_register

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Don't use pr_reg after free_registration() is called.

Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>
Signed-off-by: Andy Grover <agrover@xxxxxxxxxx>
---

Hi Nab,

I'll take a half-Grr but I think the second bit was pre-existing.

Here's an alternative patch that may be preferable, assuming it's ok
to move the free_registration() after the ua_allocate loop.

Regards -- Andy

 drivers/target/target_core_pr.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 2f5d779..361eae1 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -2158,11 +2158,6 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
 		}
 
 		/*
-		 * Release the calling I_T Nexus registration now..
-		 */
-		__core_scsi3_free_registration(cmd->se_dev, pr_reg, NULL, 1);
-
-		/*
 		 * From spc4r17, section 5.7.11.3 Unregistering
 		 *
 		 * If the persistent reservation is a registrants only
@@ -2188,13 +2183,20 @@ core_scsi3_emulate_pro_register(struct se_cmd *cmd, u64 res_key, u64 sa_res_key,
 			}
 		}
 
+		/*
+		 * Release the calling I_T Nexus registration now..
+		 */
+		__core_scsi3_free_registration(cmd->se_dev, pr_reg, NULL, 1);
+		pr_reg = NULL;
+
 		spin_unlock(&pr_tmpl->registration_lock);
 	}
 
 	ret = core_scsi3_update_and_write_aptpl(dev, aptpl);
 
 out:
-	core_scsi3_put_pr_reg(pr_reg);
+	if (pr_reg)
+		core_scsi3_put_pr_reg(pr_reg);
 	return ret;
 }
 
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux