Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp3697573pxv; Mon, 26 Jul 2021 09:38:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz5UUuXrlmje6WKPFeEdl3KDnbrNmQcrCm3cYux0o0jZETAHLNuOAY5sWR8Yr2sIV2i9dMd X-Received: by 2002:a05:6638:34aa:: with SMTP id t42mr17356061jal.128.1627317508070; Mon, 26 Jul 2021 09:38:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627317508; cv=none; d=google.com; s=arc-20160816; b=dqZzs5nWZxAB60V9+56hCsKJAa6rt4LS4FVi8+GTVvu3L/twQ4/8ig6nj8mKxMsYSz wa2nIfvm7Tf9LeCfjIzGggXn/4V/xsCsV8Z+FYL2P1ixxKJ8T2NB+x0jPT/6JxBgD0Yv VSF7Nj6bA8jLb6t4EcGiyyDydkgDZTfgkG8tshLw2p3GzxYCI/L1nTG8CAEax8gHltCE xuldTxyIkuzzhHClNHhSSq3CY6Igiv/xA6ESGF0ZP7vrRwyJjixus/p2jrhE9XG5ZK9L mXd8Mr/9NgnmTrceJvrWfHobkyPGSZHBg0d2LF6xYcAFLxj5fYMprwDZMytlnFDy3HkZ SGIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=OIz+xWPWWTqufAJgxRpanomQpFN4m7Z8O5CJU1UDVmE=; b=jtE1vvbJobhkJulTE4aUGbB7oYvBCpcFiMimA8g95sNiGxf0eBcmORl36mJWPkebf/ e2Xx9rkWJ1xtAQlpWIx2/yLVSFa1V7RauKNA24UzT4KypZCDeFR0PgeJvlPZ0fhwDOwF dcEf7T/Ta464wjzHMAfl8znnBQXyASd1tbuF6iVzzsywBaLIQV7nwZQGUdbnT2vtCpx2 91AiCc1e45bylniD81ob0T6SAtCX+u0Ts+US9TmbFmC7xPCLjVASvI1jRwIWNSGuRK8S DhxgCZ1jnx1Sg3NEMyvaNdgNNeITs9LaRH5l2XPn2joRelJnSXt5DLLK7+v5eUGCchI0 VK7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qgSDRukl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p37si351862jal.38.2021.07.26.09.38.16; Mon, 26 Jul 2021 09:38:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=qgSDRukl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239567AbhGZPxb (ORCPT + 99 others); Mon, 26 Jul 2021 11:53:31 -0400 Received: from mail.kernel.org ([198.145.29.99]:48584 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233455AbhGZPcV (ORCPT ); Mon, 26 Jul 2021 11:32:21 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 56AC561037; Mon, 26 Jul 2021 16:12:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1627315967; bh=5lSxiK+hGUEirWAqQ+wJVLRjPB2jkunTjeVLjkNdWeQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qgSDRuklGXyREqLAjNTJF7peTQwZjEd68gQOWAprWg/ZUjkK2xRd7VKirX1LO7mzL D/eo6zAZvvuwaZOsqmODOgkxEbq9k4uX/Kw9dM3rJonFcA4DZpKxmE4AFcauSlBNfV QGhR1uxEbwJSa1FkcVxcf7+eUQ4H/RYVLUJLifUo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Somnath Kotur , Michael Chan , "David S. Miller" , Sasha Levin Subject: [PATCH 5.13 109/223] bnxt_en: Check abort error state in bnxt_half_open_nic() Date: Mon, 26 Jul 2021 17:38:21 +0200 Message-Id: <20210726153849.843505188@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210726153846.245305071@linuxfoundation.org> References: <20210726153846.245305071@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Somnath Kotur [ Upstream commit 11a39259ff79b74bc99f8b7c44075a2d6d5e7ab1 ] bnxt_half_open_nic() is called during during ethtool self test and is protected by rtnl_lock. Firmware reset can be happening at the same time. Only critical portions of the entire firmware reset sequence are protected by the rtnl_lock. It is possible that bnxt_half_open_nic() can be called when the firmware reset sequence is aborting. In that case, bnxt_half_open_nic() needs to check if the ABORT_ERR flag is set and abort if it is. The ethtool self test will fail but the NIC will be brought to a consistent IF_DOWN state. Without this patch, if bnxt_half_open_nic() were to continue in this error state, it may crash like this: bnxt_en 0000:82:00.1 enp130s0f1np1: FW reset in progress during close, FW reset will be aborted Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000 ... Process ethtool (pid: 333327, stack limit = 0x0000000046476577) Call trace: bnxt_alloc_mem+0x444/0xef0 [bnxt_en] bnxt_half_open_nic+0x24/0xb8 [bnxt_en] bnxt_self_test+0x2dc/0x390 [bnxt_en] ethtool_self_test+0xe0/0x1f8 dev_ethtool+0x1744/0x22d0 dev_ioctl+0x190/0x3e0 sock_ioctl+0x238/0x480 do_vfs_ioctl+0xc4/0x758 ksys_ioctl+0x84/0xb8 __arm64_sys_ioctl+0x28/0x38 el0_svc_handler+0xb0/0x180 el0_svc+0x8/0xc Fixes: a1301f08c5ac ("bnxt_en: Check abort error state in bnxt_open_nic().") Signed-off-by: Somnath Kotur Signed-off-by: Michael Chan Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index be36dee65f90..3c3aa9467310 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -10104,6 +10104,12 @@ int bnxt_half_open_nic(struct bnxt *bp) { int rc = 0; + if (test_bit(BNXT_STATE_ABORT_ERR, &bp->state)) { + netdev_err(bp->dev, "A previous firmware reset has not completed, aborting half open\n"); + rc = -ENODEV; + goto half_open_err; + } + rc = bnxt_alloc_mem(bp, false); if (rc) { netdev_err(bp->dev, "bnxt_alloc_mem err: %x\n", rc); -- 2.30.2