Received: by 2002:a17:90a:9103:0:0:0:0 with SMTP id k3csp11803947pjo; Thu, 2 Jan 2020 14:33:49 -0800 (PST) X-Google-Smtp-Source: APXvYqwyM+auxoaiPw9Lbe6fezdFVzrHxdeOeQ8ajbZ3UHqkNWSdcEvrGlOEDSGg2U6ppmSwPIoF X-Received: by 2002:a9d:6456:: with SMTP id m22mr69924096otl.81.1578004429686; Thu, 02 Jan 2020 14:33:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578004429; cv=none; d=google.com; s=arc-20160816; b=rpoEeTwARv8xSrVLQFMK1tlhGVxVAViUm7ZSREC4Sd7i7jTTRP6EJ5bykgVRYyOIgL QqnAO5SbKWSKYKPTWuzfQYPcUKXraCJzW0iMSWkdYOZrJJ9ggpKbOlTy/3J2XF2fHOXs pcc5q8iz3BGvSZ4RZZtLhBl8v36UulKtxf3LymlR5HwcxG5omjIuQ1Ws0Y64w3QyWgaD 2PBkcN0lxa/Mc5e0QyPteCdRNfGaDx2zwp8y+Ko2ZFUsXg1+l8XxE1he+yD08kzuIFxr 8wXxYW9YhvVGdH6q3O7r+GGcj9a+VnaI+57Pt7WNVva0XoiYpL5dv0SohhKbxGYr286w BddA== 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=coPZg5kfvEiI3Y2lKFMDpywKDRZIxiAPcT8r2yk+geU=; b=uf5nWBpuHw92XVfrjnOC+9H0C4ytl7OHfsymcOHG35r/AOdlM/ug8jHqo+QJ5fyOZl oYjBk5jcPz+ZDV0F39n1rpY4Zm2fE5fNqnHbIsEeNBMMxfSDKu5FvvK9V7rN3F4dl9Qo SL894uHa2KlSE8sRDqyOMNUJN34ql33uq2YlO8IjXEIxske1OiN+jMF4KMkm4huy0FaM Zr6j1hPVW7N6wRu9zusvPzaMr3LpjizkfaCpXXkiY/ddZ1LqFZPFNDuaF+cGHnMNB9Q5 SnIF8csczPuF5HfB/CuAemAuHqnw4ZL9ZbprQepLkSzfbVl9DlKwILNqWng2Vy+eoneo Cb4g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=a7fV4jm0; 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 p28si29408288oth.296.2020.01.02.14.33.37; Thu, 02 Jan 2020 14:33:49 -0800 (PST) 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=a7fV4jm0; 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 S1730255AbgABWcs (ORCPT + 99 others); Thu, 2 Jan 2020 17:32:48 -0500 Received: from mail.kernel.org ([198.145.29.99]:39054 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730428AbgABWce (ORCPT ); Thu, 2 Jan 2020 17:32:34 -0500 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 1173D222C3; Thu, 2 Jan 2020 22:32:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578004354; bh=FfchGuimbTQU3HAsMiYwQJjdzpWMrqD+SzjysSfU/ik=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=a7fV4jm0JnV8yEIf16O8qw0FznwCSSSXSgYCMt9K7DNGFYVMPnGxhJ0pCun12pbBH 19DQB1sspEeuj/JkCYQFWVC2ner84xyVSAJ0rUDWgOeQZX7WDabvUZyLN1y931f1c7 9d2JedQZrKjm2M3xIqYcOU1mk03xVa/hcE4jAglk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Dick Kennedy , James Smart , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 4.9 126/171] scsi: lpfc: Fix duplicate unreg_rpi error in port offline flow Date: Thu, 2 Jan 2020 23:07:37 +0100 Message-Id: <20200102220604.545631189@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200102220546.960200039@linuxfoundation.org> References: <20200102220546.960200039@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: James Smart [ Upstream commit 7cfd5639d99bec0d27af089d0c8c114330e43a72 ] If the driver receives a login that is later then LOGO'd by the remote port (aka ndlp), the driver, upon the completion of the LOGO ACC transmission, will logout the node and unregister the rpi that is being used for the node. As part of the unreg, the node's rpi value is replaced by the LPFC_RPI_ALLOC_ERROR value. If the port is subsequently offlined, the offline walks the nodes and ensures they are logged out, which possibly entails unreg'ing their rpi values. This path does not validate the node's rpi value, thus doesn't detect that it has been unreg'd already. The replaced rpi value is then used when accessing the rpi bitmask array which tracks active rpi values. As the LPFC_RPI_ALLOC_ERROR value is not a valid index for the bitmask, it may fault the system. Revise the rpi release code to detect when the rpi value is the replaced RPI_ALLOC_ERROR value and ignore further release steps. Link: https://lore.kernel.org/r/20191105005708.7399-2-jsmart2021@gmail.com Signed-off-by: Dick Kennedy Signed-off-by: James Smart Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/scsi/lpfc/lpfc_sli.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index 1eb9d5f6cea0..cbe808e83f47 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c @@ -15995,6 +15995,13 @@ lpfc_sli4_alloc_rpi(struct lpfc_hba *phba) static void __lpfc_sli4_free_rpi(struct lpfc_hba *phba, int rpi) { + /* + * if the rpi value indicates a prior unreg has already + * been done, skip the unreg. + */ + if (rpi == LPFC_RPI_ALLOC_ERROR) + return; + if (test_and_clear_bit(rpi, phba->sli4_hba.rpi_bmask)) { phba->sli4_hba.rpi_count--; phba->sli4_hba.max_cfg_param.rpi_used--; -- 2.20.1