Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp5227817ybl; Tue, 27 Aug 2019 01:08:56 -0700 (PDT) X-Google-Smtp-Source: APXvYqyFoj34FwGg5JmxE323aTpktkZuqHv5X4fUzGtnQoUvR6b1Uw4bPd4brcbntGL5nIYk9ztS X-Received: by 2002:a17:902:830c:: with SMTP id bd12mr23547686plb.237.1566893336853; Tue, 27 Aug 2019 01:08:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566893336; cv=none; d=google.com; s=arc-20160816; b=es+xa6QnK7XbLjtR4OsbP9I+zPunIzxrT28gFaJE5nasSfYkEJPo94LaA4tP03uTbZ kLOVSgvRkyZSpHqOoIGh20v9tK1noB12rLsEHXi4OZpv2bzW5QZcwb1/ceNg/KOopYu0 y5Oy2k4EkNBKE/aMRoUnW9F9c6OE6Fgvhbj/A78ZOOFlQNGfRiyNqeohd1IxIz4ulB/R BLrgp55a6KsjSiMl5LAt6pek1+MR9nnhjDt1zS3XogCi2zxJKT2E6PgGohn64imEAnPu I6i+G391c3RlvAWWpfAyN+AEGiGdRdc4WtFA1s9gEh65UDHhwhLbZ20873Z7N+8L8rvS S8MA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=OqqLDgG+D5FORTWtAJZ5PPYI1WtI0+zk6HIzwYvYacY=; b=yAoZY/vOeN5nz+bqaAubUcgrd5xvunw+rvVYScN++HN7lmfgCtsVkwCpHbdTDkACof 7L/5pzlXwMerEpo6kxzFlpx3h/Z2E+sZ/su1BYm4FgL97cqfnZvMxkbGKb7arcCdK8Bc cV4LjRtmvZoxztoCvlq1SK6aVDWHdlOz6F+6BcDPh7+oB0J5ICfvk5Ygr4S7ButqGZPH wZqQDxVyGl4bR+SIA5frWDo8w/fJ4gW/uM53rBjFFqL7AgTL78XsRfnSG2Cmi5A2dIbq AP9OTAbcrMmwqb4Cxi+qPhepKlGxFFto8JfcD/06DEe9S/43KFOt96bwFEAmGlw1uUrU bgSw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IZPrZwIG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q11si11684370pls.424.2019.08.27.01.08.41; Tue, 27 Aug 2019 01:08:56 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=IZPrZwIG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732961AbfH0IHk (ORCPT + 99 others); Tue, 27 Aug 2019 04:07:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:37326 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733133AbfH0IHP (ORCPT ); Tue, 27 Aug 2019 04:07:15 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 52715217F5; Tue, 27 Aug 2019 08:07:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1566893234; bh=qodxeXGYfcOG3YludvI4FKuvMQVlM8+iqthkdXfuZj8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IZPrZwIGrf6CDn6W2PfnzzXbT19rBUXRq9PcfYwIVVj181Y5F2IZeSPt9/lxtOhWf vAiGoFmIjNGMTluB3ki6wC0meS+uZyavgz5+Tv6m1lCJj7h0m5PkJ2X3ZZaig/waZA CGrjoZXb3H4mmOwtQeimHk0MbS+Xv9HKnUmcczIo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mike Marciniszyn , Kaike Wan , Dennis Dalessandro , Doug Ledford Subject: [PATCH 5.2 155/162] IB/hfi1: Drop stale TID RDMA packets Date: Tue, 27 Aug 2019 09:51:23 +0200 Message-Id: <20190827072744.196060505@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20190827072738.093683223@linuxfoundation.org> References: <20190827072738.093683223@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kaike Wan commit d58c1834bf0d218a0bc00f8fb44874551b21da84 upstream. In a congested fabric with adaptive routing enabled, traces show that the sender could receive stale TID RDMA NAK packets that contain newer KDETH PSNs and older Verbs PSNs. If not dropped, these packets could cause the incorrect rewinding of the software flows and the incorrect completion of TID RDMA WRITE requests, and eventually leading to memory corruption and kernel crash. The current code drops stale TID RDMA ACK/NAK packets solely based on KDETH PSNs, which may lead to erroneous processing. This patch fixes the issue by also checking the Verbs PSN. Addition checks are added before rewinding the TID RDMA WRITE DATA packets. Fixes: 9e93e967f7b4 ("IB/hfi1: Add a function to receive TID RDMA ACK packet") Cc: Reviewed-by: Mike Marciniszyn Signed-off-by: Kaike Wan Signed-off-by: Dennis Dalessandro Link: https://lore.kernel.org/r/20190815192033.105923.44192.stgit@awfm-01.aw.intel.com Signed-off-by: Doug Ledford Signed-off-by: Greg Kroah-Hartman --- drivers/infiniband/hw/hfi1/tid_rdma.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) --- a/drivers/infiniband/hw/hfi1/tid_rdma.c +++ b/drivers/infiniband/hw/hfi1/tid_rdma.c @@ -4480,7 +4480,7 @@ void hfi1_rc_rcv_tid_rdma_ack(struct hfi struct rvt_swqe *wqe; struct tid_rdma_request *req; struct tid_rdma_flow *flow; - u32 aeth, psn, req_psn, ack_psn, fspsn, resync_psn, ack_kpsn; + u32 aeth, psn, req_psn, ack_psn, flpsn, resync_psn, ack_kpsn; unsigned long flags; u16 fidx; @@ -4509,6 +4509,9 @@ void hfi1_rc_rcv_tid_rdma_ack(struct hfi ack_kpsn--; } + if (unlikely(qp->s_acked == qp->s_tail)) + goto ack_op_err; + wqe = rvt_get_swqe_ptr(qp, qp->s_acked); if (wqe->wr.opcode != IB_WR_TID_RDMA_WRITE) @@ -4521,7 +4524,8 @@ void hfi1_rc_rcv_tid_rdma_ack(struct hfi trace_hfi1_tid_flow_rcv_tid_ack(qp, req->acked_tail, flow); /* Drop stale ACK/NAK */ - if (cmp_psn(psn, full_flow_psn(flow, flow->flow_state.spsn)) < 0) + if (cmp_psn(psn, full_flow_psn(flow, flow->flow_state.spsn)) < 0 || + cmp_psn(req_psn, flow->flow_state.resp_ib_psn) < 0) goto ack_op_err; while (cmp_psn(ack_kpsn, @@ -4683,8 +4687,12 @@ done: switch ((aeth >> IB_AETH_CREDIT_SHIFT) & IB_AETH_CREDIT_MASK) { case 0: /* PSN sequence error */ + if (!req->flows) + break; flow = &req->flows[req->acked_tail]; - fspsn = full_flow_psn(flow, flow->flow_state.spsn); + flpsn = full_flow_psn(flow, flow->flow_state.lpsn); + if (cmp_psn(psn, flpsn) > 0) + break; trace_hfi1_tid_flow_rcv_tid_ack(qp, req->acked_tail, flow); req->r_ack_psn = mask_psn(be32_to_cpu(ohdr->bth[2]));