Skip to content

Commit 1ecb199

Browse files
WeiFang-NXPgregkh
authored andcommitted
net: enetc: check the number of BDs needed for xdp_frame
[ Upstream commit 555c547 ] The size of xdp_redirect_arr array is ENETC_MAX_SKB_FRAGS. However, the number of fragments contained in xdp_frame may be greater than or equal to ENETC_MAX_SKB_FRAGS, which will cause the access to xdp_redirect_arr to be out of bounds. Fixes: 9d2b68c ("net: enetc: add support for XDP_REDIRECT") Signed-off-by: Wei Fang <wei.fang@nxp.com> Link: https://patch.msgid.link/20260626073244.2168214-1-wei.fang@oss.nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent bd3a6a0 commit 1ecb199

1 file changed

Lines changed: 7 additions & 0 deletions

File tree

  • drivers/net/ethernet/freescale/enetc

drivers/net/ethernet/freescale/enetc/enetc.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,6 +1400,7 @@ int enetc_xdp_xmit(struct net_device *ndev, int num_frames,
14001400
{
14011401
struct enetc_tx_swbd xdp_redirect_arr[ENETC_MAX_SKB_FRAGS] = {0};
14021402
struct enetc_ndev_priv *priv = netdev_priv(ndev);
1403+
struct skb_shared_info *shinfo;
14031404
struct enetc_bdr *tx_ring;
14041405
int xdp_tx_bd_cnt, i, k;
14051406
int xdp_tx_frm_cnt = 0;
@@ -1411,6 +1412,12 @@ int enetc_xdp_xmit(struct net_device *ndev, int num_frames,
14111412
prefetchw(ENETC_TXBD(*tx_ring, tx_ring->next_to_use));
14121413

14131414
for (k = 0; k < num_frames; k++) {
1415+
if (xdp_frame_has_frags(frames[k])) {
1416+
shinfo = xdp_get_shared_info_from_frame(frames[k]);
1417+
if (unlikely((shinfo->nr_frags + 1) > ENETC_MAX_SKB_FRAGS))
1418+
break;
1419+
}
1420+
14141421
xdp_tx_bd_cnt = enetc_xdp_frame_to_xdp_tx_swbd(tx_ring,
14151422
xdp_redirect_arr,
14161423
frames[k]);

0 commit comments

Comments
 (0)