Received: by 2002:ab2:69cc:0:b0:1f4:be93:e15a with SMTP id n12csp2010784lqp; Tue, 16 Apr 2024 05:04:58 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCU1rtBJ9WoPTcLZPLXbXvunLBTU+gQJE44LhqiNUkcUf0KyDmASkjpn6qk8FP8AAU6FtwHAS6h9/v8L5WFfPr9LUzbh7XZtIIl4/5tmiA== X-Google-Smtp-Source: AGHT+IHPbqhccjzzjjrpvtPPZilTjD3JWjpVA9C38bJoKtoJY1268/YKO2nR1DgEd/1RmrF1AlhB X-Received: by 2002:a05:622a:43:b0:434:9135:4386 with SMTP id y3-20020a05622a004300b0043491354386mr13774951qtw.48.1713269098008; Tue, 16 Apr 2024 05:04:58 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1713269097; cv=pass; d=google.com; s=arc-20160816; b=c4s9j8nPABTRH9+el6VUEjQydzYobSpbvtg6C9uYx9/2WQu70Hv85YVi/u+/32nfP6 eQ9am33DKD3Z+/Y72Yp58eN1po5l/5+ocmQgQBkfV2tUEWYYfJAMRQOwEZm36AHd36Kg dV1v0NS4LAh7zbrQFb6mTwbpTRFyn6cZF5NrLDb66f64US84w5OmNh7cpIGprJ1OgmEx wOakmi/w6AD9MhPw/WeukiQ0eROrqd1M4VJV3U3UsGa1TAt3vL+rBPmQlg4Nn2SEE2// v/JSpZ2+b8COZCaS1DzIT1TeAxNvjokOA0hZnNWBxYQ74XacVYv0ThDyntibwckXtxH/ uUOA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from; bh=CAfZJeWzOD2QLoHYYGxJa9f1plnuVNr9vpsJFBDE+xw=; fh=iDCzsdFwsWJFQNkU5jtQEScRkZQmxU6Yvae2ZkYJQ3M=; b=iiZobEQyBUPpg7l2Xyk+Mqa54ksRufBis1C8sEpvbb2thyuvmq20pMugWHE7euANR3 bFAe8VNww80vFbNvhTZDyCYL/uwVmnkBkJSRt9v2nDGn56/xFzBJb6LaxrvQqoqqtEci WdOL67kGx73cZCMESosabFmzHVxcZbuXGrkyfSmq4XaPILElhcUBBq/P+c4GvVi0dFRt AtoMI6+Xg4SqLLw/Hke0dgwld6/bao0QffXRcSOYgNN8cbsxoed6wcliZidAJgbO1z0x pX7IEQo9jLI+zXgibeNYwdxwWOqym3lBlazlgH6Afyq3XuARjA6Israv1s8naLW5OgYS Jn0w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; arc=pass (i=1 spf=pass spfdomain=bp.renesas.com dmarc=pass fromdomain=bp.renesas.com); spf=pass (google.com: domain of linux-kernel+bounces-146743-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-146743-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id o19-20020a05622a139300b00435ecc53c4csi12286561qtk.531.2024.04.16.05.04.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 16 Apr 2024 05:04:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-146743-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; arc=pass (i=1 spf=pass spfdomain=bp.renesas.com dmarc=pass fromdomain=bp.renesas.com); spf=pass (google.com: domain of linux-kernel+bounces-146743-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-146743-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=renesas.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id B86591C210D0 for ; Tue, 16 Apr 2024 12:04:57 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4E21812C470; Tue, 16 Apr 2024 12:03:56 +0000 (UTC) Received: from relmlie5.idc.renesas.com (relmlor1.renesas.com [210.160.252.171]) by smtp.subspace.kernel.org (Postfix) with ESMTP id B314212BEB9; Tue, 16 Apr 2024 12:03:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=210.160.252.171 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713269035; cv=none; b=J0HyQnBVyjcCKQK2X8oqZAWUR4b1Z2L4TYyFs1HzmKefN0+D+CNDwItgVDoEE9LAaI/0xDC3VbRfEWNtCLrM7pVbqUb9a5vnwS8qkA56OkX+3fFneBngg5THOJTULKkPXq9sSk8Pw0bDQigQe/ilDLWrxOg2LM8/l03upQmarBY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1713269035; c=relaxed/simple; bh=0W+YxBeo2ZdI0rfDSCbtlsAsOpuvBe9NutgEFbJen9k=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Fy7d2twyXJQcuf2s/r9vE/4O+4KMJWPEx9BCFuMh+Dpfc8wGw/J1OOOHlAUPix5Yv7qq/4tV8YWxahDuV2fuplqCNFvEfB431WitR1IAbZDoOA1mtPeBkgCNBmHWb91CLvQdLslxKerabh3ZEjZYhoQgexzSMHuxmN+/WaXxSsc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=bp.renesas.com; spf=pass smtp.mailfrom=bp.renesas.com; arc=none smtp.client-ip=210.160.252.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=bp.renesas.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bp.renesas.com X-IronPort-AV: E=Sophos;i="6.07,205,1708354800"; d="scan'208";a="201616942" Received: from unknown (HELO relmlir5.idc.renesas.com) ([10.200.68.151]) by relmlie5.idc.renesas.com with ESMTP; 16 Apr 2024 21:03:49 +0900 Received: from renesas-deb12.cephei.uk (unknown [10.226.93.86]) by relmlir5.idc.renesas.com (Postfix) with ESMTP id 1801740078C7; Tue, 16 Apr 2024 21:03:44 +0900 (JST) From: Paul Barker To: Sergey Shtylyov , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , =?UTF-8?q?Niklas=20S=C3=B6derlund?= , Geert Uytterhoeven Cc: Paul Barker , Claudiu Beznea , Biju Das , YueHaibing , netdev@vger.kernel.org, linux-renesas-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [net PATCH v3 4/4] net: ravb: Fix RX byte accounting for jumbo packets Date: Tue, 16 Apr 2024 13:02:54 +0100 Message-Id: <20240416120254.2620-5-paul.barker.ct@bp.renesas.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240416120254.2620-1-paul.barker.ct@bp.renesas.com> References: <20240416120254.2620-1-paul.barker.ct@bp.renesas.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit The RX byte accounting for jumbo packets was changed to fix a potential use-after-free bug. However, that fix used the wrong variable and so only accounted for the number of bytes in the final descriptor, not the number of bytes in the whole packet. To fix this, we can simply update our stats with the correct number of bytes before calling napi_gro_receive(). Also rename pkt_len to desc_len in ravb_rx_gbeth() to avoid any future confusion. The variable name pkt_len is correct in ravb_rx_rcar() as that function does not handle packets spanning multiple descriptors. Fixes: 5a5a3e564de6 ("ravb: Fix potential use-after-free in ravb_rx_gbeth()") Signed-off-by: Paul Barker Reviewed-by: Sergey Shtylyov --- No changes v2->v3 Changes v1->v2: * Added Sergey's Reviewed-by tag. drivers/net/ethernet/renesas/ravb_main.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 6969cdeeb67a..fcb756d77681 100644 --- a/drivers/net/ethernet/renesas/ravb_main.c +++ b/drivers/net/ethernet/renesas/ravb_main.c @@ -769,7 +769,7 @@ static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q) dma_addr_t dma_addr; int rx_packets = 0; u8 desc_status; - u16 pkt_len; + u16 desc_len; u8 die_dt; int entry; int limit; @@ -787,10 +787,10 @@ static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q) /* Descriptor type must be checked before all other reads */ dma_rmb(); desc_status = desc->msc; - pkt_len = le16_to_cpu(desc->ds_cc) & RX_DS; + desc_len = le16_to_cpu(desc->ds_cc) & RX_DS; /* We use 0-byte descriptors to mark the DMA mapping errors */ - if (!pkt_len) + if (!desc_len) continue; if (desc_status & MSC_MC) @@ -811,25 +811,25 @@ static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q) switch (die_dt) { case DT_FSINGLE: skb = ravb_get_skb_gbeth(ndev, entry, desc); - skb_put(skb, pkt_len); + skb_put(skb, desc_len); skb->protocol = eth_type_trans(skb, ndev); if (ndev->features & NETIF_F_RXCSUM) ravb_rx_csum_gbeth(skb); napi_gro_receive(&priv->napi[q], skb); rx_packets++; - stats->rx_bytes += pkt_len; + stats->rx_bytes += desc_len; break; case DT_FSTART: priv->rx_1st_skb = ravb_get_skb_gbeth(ndev, entry, desc); - skb_put(priv->rx_1st_skb, pkt_len); + skb_put(priv->rx_1st_skb, desc_len); break; case DT_FMID: skb = ravb_get_skb_gbeth(ndev, entry, desc); skb_copy_to_linear_data_offset(priv->rx_1st_skb, priv->rx_1st_skb->len, skb->data, - pkt_len); - skb_put(priv->rx_1st_skb, pkt_len); + desc_len); + skb_put(priv->rx_1st_skb, desc_len); dev_kfree_skb(skb); break; case DT_FEND: @@ -837,17 +837,17 @@ static bool ravb_rx_gbeth(struct net_device *ndev, int *quota, int q) skb_copy_to_linear_data_offset(priv->rx_1st_skb, priv->rx_1st_skb->len, skb->data, - pkt_len); - skb_put(priv->rx_1st_skb, pkt_len); + desc_len); + skb_put(priv->rx_1st_skb, desc_len); dev_kfree_skb(skb); priv->rx_1st_skb->protocol = eth_type_trans(priv->rx_1st_skb, ndev); if (ndev->features & NETIF_F_RXCSUM) ravb_rx_csum_gbeth(priv->rx_1st_skb); + stats->rx_bytes += priv->rx_1st_skb->len; napi_gro_receive(&priv->napi[q], priv->rx_1st_skb); rx_packets++; - stats->rx_bytes += pkt_len; break; } } -- 2.39.2