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: <16c05f6d-e971-b487-6eb8-ba5e2bcd658e@intel.com> Date: Thu, 10 Aug 2023 14:33:16 -0700 From: Tony Nguyen <anthony.l.nguyen@...el.com> To: Jesse Brandeburg <jesse.brandeburg@...el.com>, <intel-wired-lan@...ts.osuosl.org> CC: <netdev@...r.kernel.org> Subject: Re: [PATCH iwl-net v1] ice: fix receive buffer size miscalculation On 8/9/2023 5:23 PM, Jesse Brandeburg wrote: > The driver is misconfiguring the hardware for some values of MTU such that > it could use multiple descriptors to receive a packet when it could have > simply used one. > > Change the driver to use a round-up instead of the result of a shift, as > the shift can truncate the lower bits of the size, and result in the > problem noted above. It also aligns this driver with similar code in i40e. > > The insidiousness of this problem is that everything works with the wrong > size, it's just not working as well as it could, as some MTU sizes end up > using two or more descriptors, and there is no way to tell that is > happening without looking at ice_trace or a bus analyzer. This should have a Fixes: ? > Signed-off-by: Jesse Brandeburg <jesse.brandeburg@...el.com> > --- > drivers/net/ethernet/intel/ice/ice_base.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_base.c b/drivers/net/ethernet/intel/ice/ice_base.c > index b678bdf96f3a..074bf9403cd1 100644 > --- a/drivers/net/ethernet/intel/ice/ice_base.c > +++ b/drivers/net/ethernet/intel/ice/ice_base.c > @@ -435,7 +435,8 @@ static int ice_setup_rx_ctx(struct ice_rx_ring *ring) > /* Receive Packet Data Buffer Size. > * The Packet Data Buffer Size is defined in 128 byte units. > */ > - rlan_ctx.dbuf = ring->rx_buf_len >> ICE_RLAN_CTX_DBUF_S; > + rlan_ctx.dbuf = DIV_ROUND_UP(ring->rx_buf_len, > + BIT_ULL(ICE_RLAN_CTX_DBUF_S)); > > /* use 32 byte descriptors */ > rlan_ctx.dsize = 1;
Powered by blists - more mailing lists