Skip to content

Commit 74b62b4

Browse files
CIQ Kernel Automationroxanan1996
authored andcommitted
r8169: Fix possible ring buffer corruption on fragmented Tx packets.
jira VULN-43369 cve CVE-2024-38586 commit-author Ken Milmore <ken.milmore@gmail.com> commit c71e3a5 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: 9020845 ("r8169: improve rtl8169_start_xmit") Cc: stable@vger.kernel.org Signed-off-by: Ken Milmore <ken.milmore@gmail.com> Reviewed-by: Heiner Kallweit <hkallweit1@gmail.com> Link: https://lore.kernel.org/r/27ead18b-c23d-4f49-a020-1fc482c5ac95@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com> (cherry picked from commit c71e3a5) Signed-off-by: CIQ Kernel Automation <ciq_kernel_automation@ciq.com>
1 parent 3106b99 commit 74b62b4

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

drivers/net/ethernet/realtek/r8169_main.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4261,11 +4261,11 @@ static void rtl8169_doorbell(struct rtl8169_private *tp)
42614261
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
42624262
struct net_device *dev)
42634263
{
4264-
unsigned int frags = skb_shinfo(skb)->nr_frags;
42654264
struct rtl8169_private *tp = netdev_priv(dev);
42664265
unsigned int entry = tp->cur_tx % NUM_TX_DESC;
42674266
struct TxDesc *txd_first, *txd_last;
42684267
bool stop_queue, door_bell;
4268+
unsigned int frags;
42694269
u32 opts[2];
42704270

42714271
if (unlikely(!rtl_tx_slots_avail(tp))) {
@@ -4288,6 +4288,7 @@ static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
42884288

42894289
txd_first = tp->TxDescArray + entry;
42904290

4291+
frags = skb_shinfo(skb)->nr_frags;
42914292
if (frags) {
42924293
if (rtl8169_xmit_frags(tp, skb, opts, entry))
42934294
goto err_dma_1;

0 commit comments

Comments
 (0)