From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.16]) (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 2541F3F9F48; Thu, 26 Mar 2026 11:49:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.16 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774525791; cv=none; b=gvxTWp52DvPc5Bjea660/y/8Q+J9YDy+rwsJd1fW16Ok4BS6H2b23vO1hmJZmXwZydzfSd6KNe0CSFkp1gPnr6aZhyVn+4YcbkzQjYpoJcnN1pyvinsdnlSNXze3petqtYu+I0mXul3m/ZxnBXdeSP1mZLf/hNk6vS0ktNY50Do= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774525791; c=relaxed/simple; bh=bJ/7i7GSAUqEQ0ZAPb96szuqhNDdA+IRUV67wlECeAA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=gM/aJLyaxlPFraPPdywJztajEze31woHjv7kW6gIS79V8Ojgviz4E1lXFrCIbus1sQrQ1Xz3B7hNzo0Cy9p3dcvDG8KLWOxHj3A+XJG7Pw16chAhkARZGmiQM+OtMOUt5YN+KTNwN/XJMA3BSh6zj/dml246i+ptVYr0N+AOHgg= 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=E4A9/YUo; arc=none smtp.client-ip=198.175.65.16 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="E4A9/YUo" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1774525784; x=1806061784; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=bJ/7i7GSAUqEQ0ZAPb96szuqhNDdA+IRUV67wlECeAA=; b=E4A9/YUo8X1dHa3jZdZMnYIg6uU60ZuIDioj+gOwCOSDcRaVc2ttektP ie1/FL/+Zvm0XyC7g5Pq8u8UTQYFURN1NRaqIpEP6J8/BTbnb0QxVO9jx sai95+rzaZfqN6BNCErv0sP7lndaX8NTC5lAvY38KeIw3Fi2C6wG40bRh yB9OBQoQmjZ7yEPo0rMER7jCi1t7KQqX+w++CtuI5E6rgTkFlVuhHtMcZ aTIHxo2el1prbdDRtmv/gh2eupBtQV17pul2QrriBitIM/MvRo/tmj4dc YHuZ94O6r2IyfK4bgp9VMeeZDYCppkDzG7hCcGtnRAEjJ3QVB4XeWQoSG Q==; X-CSE-ConnectionGUID: AladJA+gRRiukpkQ/FJmMw== X-CSE-MsgGUID: QrFuD7wuTRuG1yimb4TiFg== X-IronPort-AV: E=McAfee;i="6800,10657,11740"; a="75776250" X-IronPort-AV: E=Sophos;i="6.23,142,1770624000"; d="scan'208";a="75776250" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by orvoesa108.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Mar 2026 04:49:42 -0700 X-CSE-ConnectionGUID: 804FdSeJQCybM+oun3TVtg== X-CSE-MsgGUID: xbe1AK+5RHyfKLf5rLrFbA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.23,142,1770624000"; d="scan'208";a="248029028" Received: from boxer.igk.intel.com ([10.102.20.173]) by fmviesa002.fm.intel.com with ESMTP; 26 Mar 2026 04:49:39 -0700 From: Maciej Fijalkowski To: netdev@vger.kernel.org Cc: bpf@vger.kernel.org, magnus.karlsson@intel.com, stfomichev@gmail.com, kuba@kernel.org, pabeni@redhat.com, horms@kernel.org, larysa.zaremba@intel.com, aleksander.lobakin@intel.com, bjorn@kernel.org, Maciej Fijalkowski Subject: [PATCH v4 net 04/11] xsk: validate MTU against usable frame size on bind Date: Thu, 26 Mar 2026 12:49:12 +0100 Message-Id: <20260326114919.519456-5-maciej.fijalkowski@intel.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20260326114919.519456-1-maciej.fijalkowski@intel.com> References: <20260326114919.519456-1-maciej.fijalkowski@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 AF_XDP bind currently accepts zero-copy pool configurations without verifying that the device MTU fits into the usable frame space provided by the UMEM chunk. This becomes a problem since we started to respect tailroom which is subtracted from chunk_size (among with headroom). 2k chunk size might not provide enough space for standard 1500 MTU, so let us catch such settings at bind time. Furthermore, validate whether underlying HW will be able to satisfy configured MTU wrt XSK's frame size multiplied by supported Rx buffer chain length (that is exposed via net_device::xdp_zc_max_segs). Fixes: 24ea50127ecf ("xsk: support mbuf on ZC RX") Signed-off-by: Maciej Fijalkowski --- net/xdp/xsk_buff_pool.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/xdp/xsk_buff_pool.c b/net/xdp/xsk_buff_pool.c index 729602a3cec0..a539e292de6c 100644 --- a/net/xdp/xsk_buff_pool.c +++ b/net/xdp/xsk_buff_pool.c @@ -10,6 +10,8 @@ #include "xdp_umem.h" #include "xsk.h" +#define ETH_PAD_LEN (ETH_HLEN + 2 * VLAN_HLEN + ETH_FCS_LEN) + void xp_add_xsk(struct xsk_buff_pool *pool, struct xdp_sock *xs) { if (!xs->tx) @@ -157,6 +159,9 @@ static void xp_disable_drv_zc(struct xsk_buff_pool *pool) int xp_assign_dev(struct xsk_buff_pool *pool, struct net_device *netdev, u16 queue_id, u16 flags) { + u32 frame_size = xsk_pool_get_rx_frame_size(pool); + u32 needed = netdev->mtu + ETH_PAD_LEN; + u32 segs = netdev->xdp_zc_max_segs; bool force_zc, force_copy; struct netdev_bpf bpf; int err = 0; @@ -200,7 +205,7 @@ int xp_assign_dev(struct xsk_buff_pool *pool, goto err_unreg_pool; } - if (netdev->xdp_zc_max_segs == 1 && (flags & XDP_USE_SG)) { + if (needed > frame_size * segs) { err = -EOPNOTSUPP; goto err_unreg_pool; } -- 2.43.0