diff options
author | Bart Van Assche <bart.vanassche@wdc.com> | 2017-10-31 14:03:17 -0400 |
---|---|---|
committer | Nicholas Bellinger <nab@linux-iscsi.org> | 2017-11-04 18:16:06 -0400 |
commit | cfe2b621bb18d86e93271febf8c6e37622da2d14 (patch) | |
tree | 1abe89ba7926820e4b7edaf7934933311759ee9a | |
parent | e1dfb21f004f403a16539e8a037963b57a25e0ad (diff) |
target/iscsi: Fix a race condition in iscsit_add_reject_from_cmd()
Avoid that cmd->se_cmd.se_tfo is read after a command has already been
freed.
Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Mike Christie <mchristi@redhat.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rw-r--r-- | drivers/target/iscsi/iscsi_target.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index 91fbada7cdc2..541f66a875fc 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c | |||
@@ -833,6 +833,7 @@ static int iscsit_add_reject_from_cmd( | |||
833 | unsigned char *buf) | 833 | unsigned char *buf) |
834 | { | 834 | { |
835 | struct iscsi_conn *conn; | 835 | struct iscsi_conn *conn; |
836 | const bool do_put = cmd->se_cmd.se_tfo != NULL; | ||
836 | 837 | ||
837 | if (!cmd->conn) { | 838 | if (!cmd->conn) { |
838 | pr_err("cmd->conn is NULL for ITT: 0x%08x\n", | 839 | pr_err("cmd->conn is NULL for ITT: 0x%08x\n", |
@@ -863,7 +864,7 @@ static int iscsit_add_reject_from_cmd( | |||
863 | * Perform the kref_put now if se_cmd has already been setup by | 864 | * Perform the kref_put now if se_cmd has already been setup by |
864 | * scsit_setup_scsi_cmd() | 865 | * scsit_setup_scsi_cmd() |
865 | */ | 866 | */ |
866 | if (cmd->se_cmd.se_tfo != NULL) { | 867 | if (do_put) { |
867 | pr_debug("iscsi reject: calling target_put_sess_cmd >>>>>>\n"); | 868 | pr_debug("iscsi reject: calling target_put_sess_cmd >>>>>>\n"); |
868 | target_put_sess_cmd(&cmd->se_cmd); | 869 | target_put_sess_cmd(&cmd->se_cmd); |
869 | } | 870 | } |