diff options
author | Bart Van Assche <bvanassche@acm.org> | 2012-08-24 10:27:54 +0000 |
---|---|---|
committer | Ben Hutchings <ben@decadent.org.uk> | 2012-10-17 03:49:18 +0100 |
commit | 6bfc0805e76ff5a2fd0e2b2f1bee777c38b0da1c (patch) | |
tree | 786394fe5d9744d3f9e0c7d20ddd84a381f6d223 /drivers/infiniband | |
parent | 1ba95552a4efd2f9e779cd840ffbd159bd0e9c7f (diff) | |
download | linux-stable-6bfc0805e76ff5a2fd0e2b2f1bee777c38b0da1c.tar.gz linux-stable-6bfc0805e76ff5a2fd0e2b2f1bee777c38b0da1c.tar.bz2 linux-stable-6bfc0805e76ff5a2fd0e2b2f1bee777c38b0da1c.zip |
IB/srp: Fix use-after-free in srp_reset_req()
commit 9b796d06d5d1b1e85ae2316a283ea11dd739ef96 upstream.
srp_free_req() uses the scsi_cmnd structure contents to unmap
buffers, so we must invoke srp_free_req() before we release
ownership of that structure.
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Acked-by: David Dillow <dillowda@ornl.gov>
Signed-off-by: Roland Dreier <roland@purestorage.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/ulp/srp/ib_srp.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c index c76b051a3b73..b3ead13cac57 100644 --- a/drivers/infiniband/ulp/srp/ib_srp.c +++ b/drivers/infiniband/ulp/srp/ib_srp.c @@ -620,9 +620,9 @@ static void srp_reset_req(struct srp_target_port *target, struct srp_request *re struct scsi_cmnd *scmnd = srp_claim_req(target, req, NULL); if (scmnd) { + srp_free_req(target, req, scmnd, 0); scmnd->result = DID_RESET << 16; scmnd->scsi_done(scmnd); - srp_free_req(target, req, scmnd, 0); } } |