bpf_xdp_adjust_head() can change the frame boundaries. Account for the
potential shift properly by calculating the new offset before
syncing the buffer to the device for XDP_TX

Fixes: ba2b232108d3 ("net: netsec: add XDP support")
Signed-off-by: Ilias Apalodimas <ilias.apalodi...@linaro.org>
---
 drivers/net/ethernet/socionext/netsec.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/socionext/netsec.c 
b/drivers/net/ethernet/socionext/netsec.c
index f9e6744d8fd6..41ddd8fff2a7 100644
--- a/drivers/net/ethernet/socionext/netsec.c
+++ b/drivers/net/ethernet/socionext/netsec.c
@@ -847,8 +847,8 @@ static u32 netsec_xdp_queue_one(struct netsec_priv *priv,
                enum dma_data_direction dma_dir =
                        page_pool_get_dma_dir(rx_ring->page_pool);
 
-               dma_handle = page_pool_get_dma_addr(page) +
-                       NETSEC_RXBUF_HEADROOM;
+               dma_handle = page_pool_get_dma_addr(page) + xdpf->headroom +
+                       sizeof(*xdpf);
                dma_sync_single_for_device(priv->dev, dma_handle, xdpf->len,
                                           dma_dir);
                tx_desc.buf_type = TYPE_NETSEC_XDP_TX;
-- 
2.23.0

Reply via email to