lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <20170515124552.GA9601@korriban> Date: Mon, 15 May 2017 09:45:52 -0300 From: Mauro Rodrigues <maurosr@...ux.vnet.ibm.com> To: netdev@...r.kernel.org Subject: Re: [PATCH net v2] i40e/i40evf: proper update of the page_offset field On Mon, May 15, 2017 at 06:52:00AM +0200, Björn Töpel wrote: > From: Björn Töpel <bjorn.topel@...el.com> > > In f8b45b74cc62 ("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: f8b45b74cc62 ("i40e/i40evf: Use build_skb to build frames") > Signed-off-by: Björn Töpel <bjorn.topel@...el.com> I tested the fix and it solves the problem for me! Thank you! > --- > drivers/net/ethernet/intel/i40e/i40e_txrx.c | 3 ++- > drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 3 ++- > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c > index 29321a6167a6..cd894f4023b1 100644 > --- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c > +++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c > @@ -1854,7 +1854,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring, > #if (PAGE_SIZE < 8192) > unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2; > #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 > struct sk_buff *skb; > > diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c > index dfe241a12ad0..12b02e530503 100644 > --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c > +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c > @@ -1190,7 +1190,8 @@ static struct sk_buff *i40e_build_skb(struct i40e_ring *rx_ring, > #if (PAGE_SIZE < 8192) > unsigned int truesize = i40e_rx_pg_size(rx_ring) / 2; > #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 > struct sk_buff *skb; > > -- > 2.11.0 >
Powered by blists - more mailing lists