mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 04:49:33 +07:00
i40e/i40evf: proper update of the page_offset field
Inf8b45b74cc
("i40e/i40evf: Use build_skb to build frames") i40e_build_skb updates the page_offset field with an incorrect offset, which can lead to data corruption. This patch updates page_offset correctly, by properly setting truesize. Note that the bug only appears on architectures where PAGE_SIZE is 8192 or larger. Fixes:f8b45b74cc
("i40e/i40evf: Use build_skb to build frames") Signed-off-by: Björn Töpel <bjorn.topel@intel.com> Acked-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
9e6c9c0f2c
commit
2aae918c7a
@ -1854,7 +1854,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
|
|||||||
#if (PAGE_SIZE < 8192)
|
#if (PAGE_SIZE < 8192)
|
||||||
unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
|
unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
|
||||||
#else
|
#else
|
||||||
unsigned int truesize = SKB_DATA_ALIGN(size);
|
unsigned int truesize = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) +
|
||||||
|
SKB_DATA_ALIGN(I40E_SKB_PAD + size);
|
||||||
#endif
|
#endif
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
|
||||||
|
@ -1190,7 +1190,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring,
|
|||||||
#if (PAGE_SIZE < 8192)
|
#if (PAGE_SIZE < 8192)
|
||||||
unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
|
unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2;
|
||||||
#else
|
#else
|
||||||
unsigned int truesize = SKB_DATA_ALIGN(size);
|
unsigned int truesize = SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) +
|
||||||
|
SKB_DATA_ALIGN(I40E_SKB_PAD + size);
|
||||||
#endif
|
#endif
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user