Patch "net: sunhme: Fix packet reception for len < RX_COPY_THRESHOLD" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: sunhme: Fix packet reception for len < RX_COPY_THRESHOLD

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-sunhme-fix-packet-reception-for-len-rx_copy_thre.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit e988da96c1518ae6bf5c58057707c34dd5651d2e
Author: Sean Anderson <seanga2@xxxxxxxxx>
Date:   Tue Sep 20 19:50:18 2022 -0400

    net: sunhme: Fix packet reception for len < RX_COPY_THRESHOLD
    
    [ Upstream commit 878e2405710aacfeeb19364c300f38b7a9abfe8f ]
    
    There is a separate receive path for small packets (under 256 bytes).
    Instead of allocating a new dma-capable skb to be used for the next packet,
    this path allocates a skb and copies the data into it (reusing the existing
    sbk for the next packet). There are two bytes of junk data at the beginning
    of every packet. I believe these are inserted in order to allow aligned DMA
    and IP headers. We skip over them using skb_reserve. Before copying over
    the data, we must use a barrier to ensure we see the whole packet. The
    current code only synchronizes len bytes, starting from the beginning of
    the packet, including the junk bytes. However, this leaves off the final
    two bytes in the packet. Synchronize the whole packet.
    
    To reproduce this problem, ping a HME with a payload size between 17 and
    214
    
            $ ping -s 17 <hme_address>
    
    which will complain rather loudly about the data mismatch. Small packets
    (below 60 bytes on the wire) do not have this issue. I suspect this is
    related to the padding added to increase the minimum packet size.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Sean Anderson <seanga2@xxxxxxxxx>
    Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
    Link: https://lore.kernel.org/r/20220920235018.1675956-1-seanga2@xxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/sun/sunhme.c b/drivers/net/ethernet/sun/sunhme.c
index 69fc47089e62..940db4ec5714 100644
--- a/drivers/net/ethernet/sun/sunhme.c
+++ b/drivers/net/ethernet/sun/sunhme.c
@@ -2063,9 +2063,9 @@ static void happy_meal_rx(struct happy_meal *hp, struct net_device *dev)
 
 			skb_reserve(copy_skb, 2);
 			skb_put(copy_skb, len);
-			dma_sync_single_for_cpu(hp->dma_dev, dma_addr, len, DMA_FROM_DEVICE);
+			dma_sync_single_for_cpu(hp->dma_dev, dma_addr, len + 2, DMA_FROM_DEVICE);
 			skb_copy_from_linear_data(skb, copy_skb->data, len);
-			dma_sync_single_for_device(hp->dma_dev, dma_addr, len, DMA_FROM_DEVICE);
+			dma_sync_single_for_device(hp->dma_dev, dma_addr, len + 2, DMA_FROM_DEVICE);
 			/* Reuse original ring buffer. */
 			hme_write_rxd(hp, this,
 				      (RXFLAG_OWN|((RX_BUF_ALLOC_SIZE-RX_OFFSET)<<16)),



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux