Hi Quinn & Himanshu, On Fri, 2017-03-24 at 08:51 +0100, gregkh@xxxxxxxxxxxxxxxxxxx wrote: > The patch below does not apply to the 4.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 <stable@xxxxxxxxxxxxxxx>. > > thanks, > > greg k-h This looks like a pretty somple backport to v4.10.y stable code. Can someone send out an updated version to Greg-KH + stable team so it can be picked up for v4.10.y and earlier stable releases..? Thank you, > > ------------------ original commit in Linus's tree ------------------ > > From 8f6fc8d4e7ae2347d6261d11a7eb2b247d2954d8 Mon Sep 17 00:00:00 2001 > From: Quinn Tran <quinn.tran@xxxxxxxxxx> > Date: Wed, 15 Mar 2017 09:48:46 -0700 > Subject: [PATCH] qla2xxx: Fix inadequate lock protection for ABTS. > > Normally, ABTS is sent to Target Core as Task MGMT command. > In the case of error, qla2xxx needs to send response, hardware_lock > is required to prevent request queue corruption. > > Cc: <stable@xxxxxxxxxxxxxxx> > Signed-off-by: Quinn Tran <quinn.tran@xxxxxxxxxx> > Signed-off-by: Himanshu Madhani <himanshu.madhani@xxxxxxxxxx> > Signed-off-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx> > > diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c > index a463bcc57902..a78c3e9bcb57 100644 > --- a/drivers/scsi/qla2xxx/qla_target.c > +++ b/drivers/scsi/qla2xxx/qla_target.c > @@ -130,6 +130,9 @@ static void qlt_send_term_imm_notif(struct scsi_qla_host *vha, > static struct fc_port *qlt_create_sess(struct scsi_qla_host *vha, > fc_port_t *fcport, bool local); > void qlt_unreg_sess(struct fc_port *sess); > +static void qlt_24xx_handle_abts(struct scsi_qla_host *, > + struct abts_recv_from_24xx *); > + > /* > * Global Variables > */ > @@ -389,6 +392,8 @@ static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, > (struct abts_recv_from_24xx *)atio; > struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, > entry->vp_index); > + unsigned long flags; > + > if (unlikely(!host)) { > ql_dbg(ql_dbg_tgt, vha, 0xffff, > "qla_target(%d): Response pkt (ABTS_RECV_24XX) " > @@ -396,9 +401,12 @@ static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, > vha->vp_idx, entry->vp_index); > break; > } > - qlt_response_pkt(host, (response_t *)atio); > + if (!ha_locked) > + spin_lock_irqsave(&host->hw->hardware_lock, flags); > + qlt_24xx_handle_abts(host, (struct abts_recv_from_24xx *)atio); > + if (!ha_locked) > + spin_unlock_irqrestore(&host->hw->hardware_lock, flags); > break; > - > } > > /* case PUREX_IOCB_TYPE: ql2xmvasynctoatio */ >