Skip to contentSkip to conversation

FAILED: patch "[PATCH] qla2xxx: Fix inadequate lock protection for ABTS." failed to apply to 4.10-stable tree

PATCH [email protected] 3 participants 4 messages Mar 24, 2017 – Apr 2, 2017

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

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 <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

Quoted 1 line

From 8f6fc8d4e7ae2347d6261d11a7eb2b247d2954d8 Mon Sep 17 00:00:00 2001

From: Quinn Tran <[email protected]>
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.

drivers/scsi/qla2xxx/qla_target.c +10 -2
index a463bcc57902..a78c3e9bcb57 100644
@@ -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 */
#1 lore raw

Hi Quinn & Himanshu,

Quoted 8 lines · On Fri, 2017-03-24 at 08:51 +0100, [email protected] 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 <[email protected]>.

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,

Quoted 56 lines

------------------ original commit in Linus's tree ------------------

From 8f6fc8d4e7ae2347d6261d11a7eb2b247d2954d8 Mon Sep 17 00:00:00 2001
From: Quinn Tran <[email protected]>
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.

drivers/scsi/qla2xxx/qla_target.c +10 -2
index a463bcc57902..a78c3e9bcb57 100644
@@ -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 */
#2 lore raw

Hi Nic,

Quoted 10 lines · Nicholas A. Bellinger

Hi Quinn & Himanshu,

Quoted 5 lines · On Fri, 2017-03-24 at 08:51 +0100, [email protected] 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 <[email protected]>.

Quoted 9 lines
Quoted 3 lines

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..?

I had sent back port to Greg, but the patch which introduced issue

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/scsi/qla2xxx?id=41dc529a4602ac737020f423f84686a81de38e6d

was not present in 4.10.x stable yet. So we do not need to back port this patch to stable.

Quoted 56 lines

Thank you,

Quoted 54 lines

------------------ original commit in Linus's tree ------------------

From 8f6fc8d4e7ae2347d6261d11a7eb2b247d2954d8 Mon Sep 17 00:00:00 2001
From: Quinn Tran <[email protected]>
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.

drivers/scsi/qla2xxx/qla_target.c +10 -2
index a463bcc57902..a78c3e9bcb57 100644
@@ -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;
-
 	}
 
Quoted 4 lines

drivers/scsi/qla2xxx/qla_target.c static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, · line 412

Quoted 2 lines
drivers/scsi/qla2xxx/qla_target.c +0 -0
 	/* case PUREX_IOCB_TYPE: ql2xmvasynctoatio */

Thanks,
- Himanshu

#3 lore raw
Quoted 22 lines · Himanshu

Hi Nic,

Quoted 10 lines · Nicholas A. Bellinger

Hi Quinn & Himanshu,

Quoted 5 lines · On Fri, 2017-03-24 at 08:51 +0100, [email protected] 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 <[email protected]>.

Quoted 9 lines
Quoted 3 lines

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..?

Quoted 5 lines

I had sent back port to Greg, but the patch which introduced issue

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/scsi/qla2xxx?id=41dc529a4602ac737020f423f84686a81de38e6d

was not present in 4.10.x stable yet. So we do not need to back port this patch to stable.

Thanks for clarifying, I was just double-checking.