FAILED: patch "[PATCH] RDMA/srp: Do not call scsi_done() from srp_abort()" failed to apply to 5.10-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.10-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.10.y
git checkout FETCH_HEAD
git cherry-pick -x e193b7955dfad68035b983a0011f4ef3590c85eb
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023100810-consensus-basically-78d8@gregkh' --subject-prefix 'PATCH 5.10.y' HEAD^..
Possible dependencies:
e193b7955dfa ("RDMA/srp: Do not call scsi_done() from srp_abort()") 5f9ae9eecb15 ("scsi: ib_srp: Call scsi_done() directly") ad215aaea4f9 ("RDMA/srp: Make struct scsi_cmnd and struct srp_request adjacent") 7ec2e27a3aff ("RDMA/srp: Fix a recently introduced memory leak") 2b5715fc1738 ("RDMA/srp: Fix support for unpopulated and unbalanced NUMA nodes")
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From e193b7955dfad68035b983a0011f4ef3590c85eb Mon Sep 17 00:00:00 2001
From: Bart Van Assche <[email protected]>
Date: Wed, 23 Aug 2023 13:57:27 -0700
Subject: [PATCH] RDMA/srp: Do not call scsi_done() from srp_abort()
After scmd_eh_abort_handler() has called the SCSI LLD eh_abort_handler callback, it performs one of the following actions:
* Call scsi_queue_insert().
* Call scsi_finish_command().
* Call scsi_eh_scmd_add().
Hence, SCSI abort handlers must not call scsi_done(). Otherwise all the above actions would trigger a use-after-free. Hence remove the scsi_done() call from srp_abort(). Keep the srp_free_req() call before returning SUCCESS because we may not see the command again if SUCCESS is returned.
drivers/infiniband/ulp/srp/ib_srp.c +5 -11
@@ -2784,7 +2784,6 @@ static int srp_abort(struct scsi_cmnd *scmnd)u32 tag;u16 ch_idx;struct srp_rdma_ch *ch; -int ret;shost_printk (KERN_ERR , target->scsi_host,"SRP abort called\n" );
@@ -2798,19 +2797,14 @@ static int srp_abort(struct scsi_cmnd *scmnd)shost_printk (KERN_ERR , target->scsi_host,"Sending SRP abort for tag %#x\n" , tag);if (srp_send_tsk_mgmt (ch, tag, scmnd->device->lun, -SRP_TSK_ABORT_TASK ,NULL ) ==0 ) - ret =SUCCESS ; -else if (target->rport->state ==SRP_RPORT_LOST ) - ret =FAST_IO_FAIL ; -else - ret =FAILED ; -if (ret ==SUCCESS ) { +SRP_TSK_ABORT_TASK ,NULL ) ==0 ) {srp_free_req (ch, req, scmnd,0 ); - scmnd->result =DID_ABORT <<16 ; -scsi_done (scmnd); +return SUCCESS ; } +if (target->rport->state ==SRP_RPORT_LOST ) +return FAST_IO_FAIL ; -return ret; +return FAILED ; }static int srp_reset_device (struct scsi_cmnd *scmnd)