From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 099C02D7BF for ; Sun, 5 Jul 2026 03:16:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783221402; cv=none; b=ZFG5RW8ZU+r6ckURse1els/Vc3DHrOARoYvmQSOaxG1ndOc3BV4pXW+fsBEygjHSm+XRpeFXrb5YO1p7SnkCfn73eqHYpPOrlrQGmE3+ARa8NE2EvHpmRYN6eIaWL4HN4JJmti3qnsnttOOinyHD/yAFUQcLpVSl17Z6/yEVazs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783221402; c=relaxed/simple; bh=aHScDNt4/t5A/Co2XvOPk7VWarXz337CU5CtUW138mY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=DDyi7EmUzkcEjQ36XBKTFlIf8nr358cBbOLV++PZ/SJ4BE53kdbiTXkO3CjBlc62qvFhqfoZJCtCVy3+LHRAlmBD+rTBimz+RxiQor0PI7E6wzRoUhDX7Z0BdZQ383gnjWQG43Pz4yUEAlGUdoeROzLzygpigOZyfh7c4YUmXFM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gotlOx+O; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gotlOx+O" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-8453427d3f4so1649642b3a.3 for ; Sat, 04 Jul 2026 20:16:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1783221400; x=1783826200; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=vdMBF9HgtBA/0yHlO0vaoiTg/IGe3bGgmehxiViDhmU=; b=gotlOx+OBvHTCvDfDtsmh1V5/cGRJXogO9GslsFX7eBt4eRuXxVTpl0tsbRXby9KG1 4j8gurqWeXG4ob5qtAFndIGFCqiJxnzjKmXhU0nraxgXQ1DYdtCHHb+KbDmOcTZv/6Fn wHVWdNZkpw8h61glp1LOPClOMdhaNTzx0StOywQiC0YigJuhGD8WmgyPLBIGny+5T2HK 9PSE3+BqFDAi6x+6vhCdUJMBBFiv2OXSTDaHdZqnpp7e59RtOzpuhw7ap1F6K2L2iSX7 nL5FLhreAhkatVkn9+PstLPBDmFkk9Ab6iHY4NFGxWxvkcf3yWbSHo/wAZz9CvJYFsv7 PLCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783221400; x=1783826200; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vdMBF9HgtBA/0yHlO0vaoiTg/IGe3bGgmehxiViDhmU=; b=VLsBbKZ4e37xKMnBwIxDD4LoMg9VwRkIaLwIP9r/3bt1R3fqsckz7Iiu4+6T4nRzTp kTS3QgSSjp/6mjUTeEAyghaNQd0y5mb601ZvVe8X1Eiuy2dq2MZbz4RYOXN9IEI0WuCi BOZl8aag4m6i06sI4mVdMX8mT1KrFJtLTOOnIh1k7z8J28PaEiab90mIWdcfNk9khzMa rPsi7t3HnLzqsnt8BGH6NAAgGvgLy+DvsO0lOyqHCHJD+PPbFo1DStkLhpcHDTLfbPXW DoDDENGG2g2Amw29k6B4tQts6asIaGkt6nxOyFbQrh1O+YY7/mf6Mv81nsD3dOkBWoWq qiAQ== X-Forwarded-Encrypted: i=1; AFNElJ+szOsUbeWPAy2ymHnWBUbtiW9M/Y4qC/3d6RLXsfEzXCtqW7GZSQv2502P4H/465SZQopllKoYhHmfk88=@vger.kernel.org X-Gm-Message-State: AOJu0YyAd5QXnVZwY6agVpccnk6OcBzatx9gYb/bRpyerC/0Qv+UrQ8A pYOKLbeVwda9POLdJnakNXVKQwKur66PyQ2S/sTy/FygYkYyYJGWclGg X-Gm-Gg: AfdE7ckW9G4Wr1fE6ESjlbGvR4vPCnEHCH2JR4iktjHPWwiaRNn1u76TpUJUNsuLFuR IKqUUOHI+1fmmNdRz6tl2I07rONh+zPNMSvub73rxdsQEl/zglr+lNrtOzLnP3TiaQ45BSI9bJf 0ri1q+1G8mhQWl2W7hLDylEOSkmkdW1JlU4OiUk+z9IYQ0xXHNopWpw0WaXiK55I0x0/BH5+eEK xUSVzWF8DkOx2+4xsbyppISk9LB8Tgz7DTYvhmje6usleqyamqdoKO0KUJ/jogmRks0bqfgGonX Khe13DXciQQgtXVr4s2whCF1o/9TKngE/YyR6lj1Tw8s+C++sHAC71DHnB0PfJKjSYKJ+KEuyhB 62XrrbSGmyMPObbNbziS54Z00sROjNRigs2yrlGA7AbPnZJt0a/LjCCXCEQawzLXEFUETrJHSCm n8PA== X-Received: by 2002:a05:6a00:410e:b0:847:7f38:27c6 with SMTP id d2e1a72fcca58-847f6f3a87dmr4488004b3a.50.1783221400392; Sat, 04 Jul 2026 20:16:40 -0700 (PDT) Received: from lgs.. ([152.32.188.52]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-847f6dddf8bsm1832912b3a.61.2026.07.04.20.16.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 04 Jul 2026 20:16:39 -0700 (PDT) From: Guangshuo Li To: Veerasenareddy Burru , Sathesh Edara , Shinas Rasheed , Satananda Burla , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , David Carlier , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Guangshuo Li Subject: [PATCH] octeon_ep_vf: Fix RX page leak on napi_build_skb() failure Date: Sun, 5 Jul 2026 11:16:20 +0800 Message-ID: <20260705031620.274396-1-lgs201920130244@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit __octep_vf_oq_process_rx() clears buff_info->page before building an skb from the RX page. On the success path the page is consumed by the skb, either as the skb head or as an RX fragment. If napi_build_skb() fails, however, the page is not consumed by an skb. The error path advances the descriptor and leaves the ring slot cleared, so the page is no longer tracked and is leaked. In the multi-fragment case, the remaining fragment pages are also unmapped and removed from their ring slots without being released. Release the head page when napi_build_skb() fails, and release each remaining fragment page before clearing its ring slot. Fixes: dd66b4285470 ("octeon_ep_vf: add NULL check for napi_build_skb()") Signed-off-by: Guangshuo Li --- drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_rx.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_rx.c b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_rx.c index d98247408242..302559b16be7 100644 --- a/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_rx.c +++ b/drivers/net/ethernet/marvell/octeon_ep_vf/octep_vf_rx.c @@ -418,6 +418,7 @@ static int __octep_vf_oq_process_rx(struct octep_vf_device *oct, skb = napi_build_skb((void *)resp_hw, PAGE_SIZE); if (!skb) { oq->stats->alloc_failures++; + put_page(virt_to_page(resp_hw)); desc_used++; read_idx = octep_vf_oq_next_idx(oq, read_idx); continue; @@ -434,6 +435,7 @@ static int __octep_vf_oq_process_rx(struct octep_vf_device *oct, skb = napi_build_skb((void *)resp_hw, PAGE_SIZE); if (!skb) { oq->stats->alloc_failures++; + put_page(virt_to_page(resp_hw)); desc_used++; read_idx = octep_vf_oq_next_idx(oq, read_idx); data_len = buff_info->len - oq->max_single_buffer_size; @@ -442,6 +444,7 @@ static int __octep_vf_oq_process_rx(struct octep_vf_device *oct, PAGE_SIZE, DMA_FROM_DEVICE); buff_info = (struct octep_vf_rx_buffer *) &oq->buff_info[read_idx]; + put_page(buff_info->page); buff_info->page = NULL; if (data_len < oq->buffer_size) data_len = 0; -- 2.43.0