diff options
author | Xiubo Li <xiubli@redhat.com> | 2019-01-22 05:10:51 -0500 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2019-01-22 20:54:00 -0500 |
commit | 40d883b091758472c79b81fa1c0e0347e24a9cff (patch) | |
tree | ad7689cc55e8afca8e011ca842958d1da2804a10 /drivers/target | |
parent | fe35a40e675473eb65f2f5462b82770f324b5689 (diff) |
scsi: tcmu: fix use after free
Fixes: a94a2572b977 ("scsi: tcmu: avoid cmd/qfull timers updated whenever a new cmd comes")
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Mike Christie <mchristi@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Reviewed-by: Mike Christie <mchristi@redhat.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/target')
-rw-r--r-- | drivers/target/target_core_user.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/target/target_core_user.c b/drivers/target/target_core_user.c index c34c88ef3319..5831e0eecea1 100644 --- a/drivers/target/target_core_user.c +++ b/drivers/target/target_core_user.c | |||
@@ -1317,12 +1317,13 @@ static int tcmu_check_expired_cmd(int id, void *p, void *data) | |||
1317 | * target_complete_cmd will translate this to LUN COMM FAILURE | 1317 | * target_complete_cmd will translate this to LUN COMM FAILURE |
1318 | */ | 1318 | */ |
1319 | scsi_status = SAM_STAT_CHECK_CONDITION; | 1319 | scsi_status = SAM_STAT_CHECK_CONDITION; |
1320 | list_del_init(&cmd->queue_entry); | ||
1320 | } else { | 1321 | } else { |
1322 | list_del_init(&cmd->queue_entry); | ||
1321 | idr_remove(&udev->commands, id); | 1323 | idr_remove(&udev->commands, id); |
1322 | tcmu_free_cmd(cmd); | 1324 | tcmu_free_cmd(cmd); |
1323 | scsi_status = SAM_STAT_TASK_SET_FULL; | 1325 | scsi_status = SAM_STAT_TASK_SET_FULL; |
1324 | } | 1326 | } |
1325 | list_del_init(&cmd->queue_entry); | ||
1326 | 1327 | ||
1327 | pr_debug("Timing out cmd %u on dev %s that is %s.\n", | 1328 | pr_debug("Timing out cmd %u on dev %s that is %s.\n", |
1328 | id, udev->name, is_running ? "inflight" : "queued"); | 1329 | id, udev->name, is_running ? "inflight" : "queued"); |