This is a note to let you know that I've just added the patch titled r8169: Fix possible ring buffer corruption on fragmented Tx packets. to the 5.15-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: r8169-fix-possible-ring-buffer-corruption-on-fragmented-tx-packets.patch and it can be found in the queue-5.15 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From c71e3a5cffd5309d7f84444df03d5b72600cc417 Mon Sep 17 00:00:00 2001 From: Ken Milmore <ken.milmore@xxxxxxxxx> Date: Tue, 21 May 2024 23:45:50 +0100 Subject: r8169: Fix possible ring buffer corruption on fragmented Tx packets. From: Ken Milmore <ken.milmore@xxxxxxxxx> commit c71e3a5cffd5309d7f84444df03d5b72600cc417 upstream. An issue was found on the RTL8125b when transmitting small fragmented packets, whereby invalid entries were inserted into the transmit ring buffer, subsequently leading to calls to dma_unmap_single() with a null address. This was caused by rtl8169_start_xmit() not noticing changes to nr_frags which may occur when small packets are padded (to work around hardware quirks) in rtl8169_tso_csum_v2(). To fix this, postpone inspecting nr_frags until after any padding has been applied. Fixes: 9020845fb5d6 ("r8169: improve rtl8169_start_xmit") Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Ken Milmore <ken.milmore@xxxxxxxxx> Reviewed-by: Heiner Kallweit <hkallweit1@xxxxxxxxx> Link: https://lore.kernel.org/r/27ead18b-c23d-4f49-a020-1fc482c5ac95@xxxxxxxxx Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/net/ethernet/realtek/r8169_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/drivers/net/ethernet/realtek/r8169_main.c +++ b/drivers/net/ethernet/realtek/r8169_main.c @@ -4273,11 +4273,11 @@ static void rtl8169_doorbell(struct rtl8 static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev) { - unsigned int frags = skb_shinfo(skb)->nr_frags; struct rtl8169_private *tp = netdev_priv(dev); unsigned int entry = tp->cur_tx % NUM_TX_DESC; struct TxDesc *txd_first, *txd_last; bool stop_queue, door_bell; + unsigned int frags; u32 opts[2]; if (unlikely(!rtl_tx_slots_avail(tp))) { @@ -4300,6 +4300,7 @@ static netdev_tx_t rtl8169_start_xmit(st txd_first = tp->TxDescArray + entry; + frags = skb_shinfo(skb)->nr_frags; if (frags) { if (rtl8169_xmit_frags(tp, skb, opts, entry)) goto err_dma_1; Patches currently in stable-queue which might be from ken.milmore@xxxxxxxxx are queue-5.15/r8169-fix-possible-ring-buffer-corruption-on-fragmented-tx-packets.patch queue-5.15/revert-r8169-don-t-try-to-disable-interrupts-if-napi-is-scheduled-already.patch