From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3057452F26F; Fri, 18 Sep 2026 21:25:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789766713; cv=none; b=QCzOAK0HMRd2SNqWHAwJlpT0qEx+XEbQGigEziVPhg+x2ME/WC7znw3WRRVMREfCxbbeVNT3twE2jEs7pqO0ioNsUk3jjLRleSPG8FNoIuDH/pz4Qd/4uibot5IEgTrPeOOe8PlVy0iWT9L4yd/Ueu0Lb7vCWG5daq2qpJplkIM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789766713; c=relaxed/simple; bh=sQKjj1Vx30kHsvvc2cJFd2V0ogwSzZaUpRNz4VVLkBw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fnTjfHfpP5r5XJdB/3YdbmCjuunspFEZaEbnqDxyS+VhYZtRBE0hGfQjrnqo6s56gN6PBUIV0UIg4f0IEh1/KvM3GQJQWgDO7jnb5zMIIYN52tBaVoJB3aaiWCtFKpNWlX1ab6L9EJvCGEQVKtZpqVCxgSXMlx/2Zj18XiGY79s= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com; spf=pass smtp.mailfrom=intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=jU+G3hud; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="jU+G3hud" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1789766711; x=1821302711; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sQKjj1Vx30kHsvvc2cJFd2V0ogwSzZaUpRNz4VVLkBw=; b=jU+G3hudVL9UnnrzsK/UaKNPy89SyrId9v+alIiXTKh+pUzlfGszJV9B 5Jj690uf4UMAYtOoeEVOFmob979MKc04OtJan8o/9yVWLd0OERO3yUFxy ZFUyksSLJq9nQ4cRjjbJ2wvpfIBIu1B+9DJGpbv0LEkjyVCk9YAyy4TYz n+8YAMVsK5/IoYDW3Zk7eCCHDPmZKn8YyueuzJ/i4or8NWBNT9f0Mv7kE NR90FK6y5PUvc+LssAYiRDMtr+vgIRyWRmXobyaie+yAUASg9reEDFU1m 0P9q0F+O/dYWTU/pB+Yw+zn/TxY9wPs+fhU3J2SbSxPDxUKVqK7Y1AMdm Q==; X-CSE-ConnectionGUID: Omt+e4YVSwee+upLcb+n8Q== X-CSE-MsgGUID: DXyf5AYLSxSGA4xfMHji0A== X-IronPort-AV: E=McAfee;i="6800,10657,11909"; a="89436291" X-IronPort-AV: E=Sophos;i="6.27,109,1787036400"; d="scan'208";a="89436291" Received: from fmviesa007.fm.intel.com ([10.60.135.147]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Sep 2026 14:25:08 -0700 X-CSE-ConnectionGUID: jFZU+Mh4Qv6N+kzq4FdcLA== X-CSE-MsgGUID: +00q3q51Sw6PlUK0w06qHA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.27,109,1787036400"; d="scan'208";a="271251429" Received: from anguy11-upstream.jf.intel.com ([10.166.9.133]) by fmviesa007.fm.intel.com with ESMTP; 18 Sep 2026 14:25:07 -0700 From: Tony Nguyen To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, netdev@vger.kernel.org Cc: Chenguang Zhao , anthony.l.nguyen@intel.com, maciej.fijalkowski@intel.com, magnus.karlsson@intel.com, jacob.e.keller@intel.com, przemyslaw.kitszel@intel.com, jbrandeb@kernel.org, horms@kernel.org, kerneljasonxing@gmail.com, ast@kernel.org, daniel@iogearbox.net, hawk@kernel.org, john.fastabend@gmail.com, sdf@fomichev.me, bpf@vger.kernel.org, Aleksandr Loktionov , Patryk Holda Subject: [PATCH net 8/8] i40e: xsk: fix multi-buffer XDP_PASS skb construction Date: Fri, 18 Sep 2026 14:24:55 -0700 Message-ID: <20260918212458.550425-9-anthony.l.nguyen@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20260918212458.550425-1-anthony.l.nguyen@intel.com> References: <20260918212458.550425-1-anthony.l.nguyen@intel.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Chenguang Zhao When AF_XDP ZC receives a multi-buffer frame and the XDP program returns XDP_PASS, i40e_construct_skb_zc() copies frags into a new skb. The copy used skb_frag_page() as the memcpy source (page metadata instead of packet data) and passed a virtual address to __skb_fill_page_desc_noacc(), which expects a struct page *. Use skb_frag_address() for the copy, attach frags with skb_add_rx_frag() so len/data_len/truesize are updated, and on dev_alloc_page() failure free the skb via the shared out path so xsk_buff_free() still runs and previously attached pages are released by kfree_skb. Fixes: 1c9ba9c14658 ("i40e: xsk: add RX multi-buffer support") Signed-off-by: Chenguang Zhao Reviewed-by: Aleksandr Loktionov Reviewed-by: Jason Xing Acked-by: Maciej Fijalkowski Tested-by: Patryk Holda Signed-off-by: Tony Nguyen --- drivers/net/ethernet/intel/i40e/i40e_xsk.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c index 9f47388eaba5..a4247710c85b 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c +++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c @@ -318,22 +318,19 @@ static struct sk_buff *i40e_construct_skb_zc(struct i40e_ring *rx_ring, goto out; for (int i = 0; i < nr_frags; i++) { - struct skb_shared_info *skinfo = skb_shinfo(skb); skb_frag_t *frag = &sinfo->frags[i]; + unsigned int frag_size = skb_frag_size(frag); struct page *page; - void *addr; page = dev_alloc_page(); if (!page) { dev_kfree_skb(skb); - return NULL; + skb = NULL; + goto out; } - addr = page_to_virt(page); - memcpy(addr, skb_frag_page(frag), skb_frag_size(frag)); - - __skb_fill_page_desc_noacc(skinfo, skinfo->nr_frags++, - addr, 0, skb_frag_size(frag)); + memcpy(page_to_virt(page), skb_frag_address(frag), frag_size); + skb_add_rx_frag(skb, i, page, 0, frag_size, PAGE_SIZE); } out: -- 2.47.1