Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp2768470pxf; Sun, 28 Mar 2021 01:23:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZYLmDSS4PpjFuXJSm3oHvoEbRK+sNdivEZ7y+SHDvUFdYjLkT4eiD56d34xJOoOijppK7 X-Received: by 2002:a17:907:9709:: with SMTP id jg9mr22931073ejc.276.1616919812483; Sun, 28 Mar 2021 01:23:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1616919812; cv=none; d=google.com; s=arc-20160816; b=u/yiDNEzCRndaHxZMNxL/jKHbppO15Pc2JrOwzXk6td5kEbe/ZAXlWWA3J4C8d83B4 ITjuGy4/XFO611/tJjDzVOXllU2LnoEI3LHS/XIJMeYzON00uQQiP7EnNk20drgA+6Ab mYD0rPmwEsEhSOd1kPq4GxJ4NINrM8ni25NNLY+M+kFcpZD50YjMBUPsIWpduL8uAryk psXfRP8sic2/NtAO9mjpUM3jRxo8SUJz41EkBMaz7bQpcH1Lc4SICAxYsHJGEHshiij7 /OhcQ6kTj92oeAtpYCDOOG4vgpTe+AywGc4Xr/Cgrhh1IkYEVCY0EErIQ2rOaARnrRZB nb9A== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=7u9Bgk9oEJz1bBIjfI12UBnidj1IuNItVEUVU4M2CdE=; b=Of2c0Am4ELvK1+wf8UijdmnJZ5pwvpz1CaGbPY75Mo4MgUEsCclDiqmuC+na7Nmc7B a+2s6hHb+rs46ymlyJv+ytqKLozYPSIbOCH62KbbHfJxm2ApmiGe2hSQDWeB+105ggvu SyvPFVUwIulUFg0nxLPORXaYxPzBfbN3AohHWtpft8of7xNT201fF21hCx2NBPxHgzvN nVk6cSE/vS2v/0E8rUpxrvG23TbXSRy9mZVdevWQJb7qxUhJWtmJAAnKbBbpWt6X5IC6 5+gGWvXBm42Kfev/+b0QJsPN+cDSI/83TXb1gwK7/BmRZqH/mn1cgsstNARiujI7ZR8Z Zp8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mail.ustc.edu.cn header.s=dkim header.b=hd+WDkqb; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mail.ustc.edu.cn Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o22si11432344edr.219.2021.03.28.01.23.10; Sun, 28 Mar 2021 01:23:32 -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=@mail.ustc.edu.cn header.s=dkim header.b=hd+WDkqb; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mail.ustc.edu.cn Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230319AbhC1IQ2 (ORCPT + 99 others); Sun, 28 Mar 2021 04:16:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229489AbhC1IQU (ORCPT ); Sun, 28 Mar 2021 04:16:20 -0400 Received: from ustc.edu.cn (email6.ustc.edu.cn [IPv6:2001:da8:d800::8]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 20050C061762; Sun, 28 Mar 2021 01:16:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mail.ustc.edu.cn; s=dkim; h=Received:From:To:Cc:Subject:Date: Message-Id:MIME-Version:Content-Transfer-Encoding; bh=7u9Bgk9oEJ z1bBIjfI12UBnidj1IuNItVEUVU4M2CdE=; b=hd+WDkqbWzLawkk/MHeknDiIgL JO4Q6yCCBnFs5DGcWBgqwetl9+0B59Zku8kzl65bSZU/WfkpPDR5VeZ93tg+pZfA mXVhxMvkgp+TRnusvYNZQc78fWJyR1ukOT4LH4IwTARCStip5Oy3pWjSRnFcn/ou obEKF/t3wkeBArMyk= Received: from ubuntu.localdomain (unknown [202.38.69.14]) by newmailweb.ustc.edu.cn (Coremail) with SMTP id LkAmygAHDk5HO2BgDdNcAA--.3711S4; Sun, 28 Mar 2021 16:16:07 +0800 (CST) From: Lv Yunlong To: skashyap@marvell.com, jhasan@marvell.com, GR-QLogic-Storage-Upstream@marvell.com, jejb@linux.ibm.com, martin.petersen@oracle.com Cc: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Lv Yunlong Subject: [PATCH] scsi/bnx2fc/bnx2fx_fcore: Fix a double free in bnx2fc_rcv Date: Sun, 28 Mar 2021 01:16:03 -0700 Message-Id: <20210328081603.5428-1-lyl2019@mail.ustc.edu.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID: LkAmygAHDk5HO2BgDdNcAA--.3711S4 X-Coremail-Antispam: 1UD129KBjvJXoW7XFyxXFWUWr45ur15JFy5Jwb_yoW8Jr4xpa n2q3W5CFs5Cw4jkr4jq3yUGw15Ca4rJr9xKayxKan8CayfJr1FyF95tay0qr45GFWrCw42 qrn5tFyY9a1qqF7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUvG14x267AKxVW8JVW5JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26ryj6F1UM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26F4j 6r4UJwA2z4x0Y4vEx4A2jsIE14v26rxl6s0DM28EF7xvwVC2z280aVCY1x0267AKxVW0oV Cq3wAac4AC62xK8xCEY4vEwIxC4wAS0I0E0xvYzxvE52x082IY62kv0487Mc02F40EFcxC 0VAKzVAqx4xG6I80ewAv7VC0I7IYx2IY67AKxVWUJVWUGwAv7VC2z280aVAFwI0_Jr0_Gr 1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4x0x7Aq67IIx4CEVc8vx2IE rcIFxwCY02Avz4vE14v_GFyl42xK82IYc2Ij64vIr41l4I8I3I0E4IkC6x0Yz7v_Jr0_Gr 1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWUGVWUWwC2zVAF1VAY17CE 14v26r1q6r43MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI0_Jr0_JF4lIxAIcVC0I7 IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE42xK8VAvwI8IcIk0rVWrJr0_WFyUJwCI42IY 6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r4j6r4UJbIYCTnIWIevJa 73UjIFyTuYvjfUeFALDUUUU X-CM-SenderInfo: ho1ojiyrz6zt1loo32lwfovvfxof0/ Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In bnx2fc_rcv, it calls skb_share_check(skb,GFP_ATOMIC) to clone the skb. But if skb_clone() failed, skb_share_check() will free the skb in the first time and return NULL. Then skb_share_check() returns NULL and goto err. Unfortunately, the same skb is freed in the second time in err. I think moving skb = tmp_skb in front of if(!tmp_err) goto err is a good solution, because freeing a NULL skb is safe. Fixes: 01a4cc4d0cd6a ("bnx2fc: do not add shared skbs to the fcoe_rx_list") Signed-off-by: Lv Yunlong --- drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c index 16bb6d2f98de..2e213d336ebe 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c @@ -445,11 +445,11 @@ static int bnx2fc_rcv(struct sk_buff *skb, struct net_device *dev, } tmp_skb = skb_share_check(skb, GFP_ATOMIC); + skb = tmp_skb; + if (!tmp_skb) goto err; - skb = tmp_skb; - if (unlikely(eth_hdr(skb)->h_proto != htons(ETH_P_FCOE))) { printk(KERN_ERR PFX "bnx2fc_rcv: Wrong FC type frame\n"); goto err; -- 2.25.1