> From: Chenguang Zhao <[email protected]> > > 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 <[email protected]> > Reviewed-by: Aleksandr Loktionov <[email protected]> > Reviewed-by: Jason Xing <[email protected]>
Acked-by: Maciej Fijalkowski <[email protected]>
