Message ID | 20200813152856.50088-1-maier@linux.ibm.com (mailing list archive) |
---|---|
State | Mainlined |
Commit | 2d9a2c5f581be3991ba67fa9e7497c711220ea8e |
Headers | show |
Series | zfcp: fix use-after-free in request timeout handlers | expand |
On Thu, 13 Aug 2020 17:28:56 +0200, Steffen Maier wrote: > Before v4.15 commit 75492a51568b ("s390/scsi: Convert timers to use > timer_setup()"), we intentionally only passed zfcp_adapter as context > argument to zfcp_fsf_request_timeout_handler(). Since we only trigger > adapter recovery, it was unnecessary to sync against races between timeout > and (late) completion. > Likewise, we only passed zfcp_erp_action as context argument to > zfcp_erp_timeout_handler(). Since we only wakeup an ERP action, it was > unnecessary to sync against races between timeout and (late) completion. > > [...] Applied to 5.9/scsi-fixes, thanks! [1/1] scsi: zfcp: Fix use-after-free in request timeout handlers https://git.kernel.org/mkp/scsi/c/2d9a2c5f581b
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c index c795f22249d8..140186fe1d1e 100644 --- a/drivers/s390/scsi/zfcp_fsf.c +++ b/drivers/s390/scsi/zfcp_fsf.c @@ -434,7 +434,7 @@ static void zfcp_fsf_req_complete(struct zfcp_fsf_req *req) return; } - del_timer(&req->timer); + del_timer_sync(&req->timer); zfcp_fsf_protstatus_eval(req); zfcp_fsf_fsfstatus_eval(req); req->handler(req); @@ -867,7 +867,7 @@ static int zfcp_fsf_req_send(struct zfcp_fsf_req *req) req->qdio_req.qdio_outb_usage = atomic_read(&qdio->req_q_free); req->issued = get_tod_clock(); if (zfcp_qdio_send(qdio, &req->qdio_req)) { - del_timer(&req->timer); + del_timer_sync(&req->timer); /* lookup request again, list might have changed */ zfcp_reqlist_find_rm(adapter->req_list, req_id); zfcp_erp_adapter_reopen(adapter, 0, "fsrs__1");