{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2026-31563",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2026-31563"
  ],
  "published": "2026-04-24T14:37:34Z",
  "summary": "net: macb: Use dev_consume_skb_any() to free TX SKBs",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: macb: Use dev_consume_skb_any() to free TX SKBs\n\nThe napi_consume_skb() function is not intended to be called in an IRQ\ndisabled context. However, after commit 6bc8a5098bf4 (\"net: macb: Fix\ntx_ptr_lock locking\"), the freeing of TX SKBs is performed with IRQs\ndisabled. To resolve the following call trace, use dev_consume_skb_any()\nfor freeing TX SKBs:\n   WARNING: kernel/softirq.c:430 at __local_bh_enable_ip+0x174/0x188, CPU#0: ksoftirqd/0/15\n   Modules linked in:\n   CPU: 0 UID: 0 PID: 15 Comm: ksoftirqd/0 Not tainted 7.0.0-rc4-next-20260319-yocto-standard-dirty #37 PREEMPT\n   Hardware name: ZynqMP ZCU102 Rev1.1 (DT)\n   pstate: 200000c5 (nzCv daIF -PAN -UAO -TCO -DIT -SSBS BTYPE=--)\n   pc : __local_bh_enable_ip+0x174/0x188\n   lr : local_bh_enable+0x24/0x38\n   sp : ffff800082b3bb10\n   x29: ffff800082b3bb10 x28: ffff0008031f3c00 x27: 000000000011ede0\n   x26: ffff000800a7ff00 x25: ffff800083937ce8 x24: 0000000000017a80\n   x23: ffff000803243a78 x22: 0000000000000040 x21: 0000000000000000\n   x20: ffff000800394c80 x19: 0000000000000200 x18: 0000000000000001\n   x17: 0000000000000001 x16: ffff000803240000 x15: 0000000000000000\n   x14: ffffffffffffffff x13: 0000000000000028 x12: ffff000800395650\n   x11: ffff8000821d1528 x10: ffff800081c2bc08 x9 : ffff800081c1e258\n   x8 : 0000000100000301 x7 : ffff8000810426ec x6 : 0000000000000000\n   x5 : 0000000000000001 x4 : 0000000000000001 x3 : 0000000000000000\n   x2 : 0000000000000008 x1 : 0000000000000200 x0 : ffff8000810428dc\n   Call trace:\n    __local_bh_enable_ip+0x174/0x188 (P)\n    local_bh_enable+0x24/0x38\n    skb_attempt_defer_free+0x190/0x1d8\n    napi_consume_skb+0x58/0x108\n    macb_tx_poll+0x1a4/0x558\n    __napi_poll+0x50/0x198\n    net_rx_action+0x1f4/0x3d8\n    handle_softirqs+0x16c/0x560\n    run_ksoftirqd+0x44/0x80\n    smpboot_thread_fn+0x1d8/0x338\n    kthread+0x120/0x150\n    ret_from_fork+0x10/0x20\n   irq event stamp: 29751\n   hardirqs last  enabled at (29750): [<ffff8000813be184>] _raw_spin_unlock_irqrestore+0x44/0x88\n   hardirqs last disabled at (29751): [<ffff8000813bdf60>] _raw_spin_lock_irqsave+0x38/0x98\n   softirqs last  enabled at (29150): [<ffff8000800f1aec>] handle_softirqs+0x504/0x560\n   softirqs last disabled at (29153): [<ffff8000800f2fec>] run_ksoftirqd+0x44/0x80",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.12.47-1+rpt1~bookworm",
        "1:6.12.62-1+rpt1~bookworm",
        "1:6.12.75-1+rpt1~bookworm"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.12.47+rpt-rpi-2712",
            "binary_version": "1:6.12.47-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.47+rpt-rpi-v8",
            "binary_version": "1:6.12.47-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.47+rpt-rpi-v8-rt",
            "binary_version": "1:6.12.47-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.62+rpt-rpi-2712",
            "binary_version": "1:6.12.62-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.62+rpt-rpi-v8",
            "binary_version": "1:6.12.62-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.62+rpt-rpi-v8-rt",
            "binary_version": "1:6.12.62-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.75+rpt-rpi-2712",
            "binary_version": "1:6.12.75-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.75+rpt-rpi-v8",
            "binary_version": "1:6.12.75-1+rpt1~bookworm"
          },
          {
            "binary_name": "linux-image-6.12.75+rpt-rpi-v8-rt",
            "binary_version": "1:6.12.75-1+rpt1~bookworm"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.12.47-1+rpt1~bookworm": {
            "linux_commit": "359f37f0faefb712add32a39f98751aea67d5c1f",
            "upstream_version": "6.12.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.12.80"
          },
          "1:6.12.62-1+rpt1~bookworm": {
            "linux_commit": "a1073743767f9e7fdc7017ababd2a07ea0c97c1c",
            "upstream_version": "6.12.62",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.12.80"
          },
          "1:6.12.75-1+rpt1~bookworm": {
            "linux_commit": "89050b1059997d38d55462b323b099a6436dc10d",
            "upstream_version": "6.12.75",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.12.80"
          }
        }
      }
    },
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:13",
        "name": "linux"
      },
      "versions": [
        "1:6.12.47-1+rpt1",
        "1:6.12.62-1+rpt1",
        "1:6.12.75-1+rpt1"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.12.47+rpt-rpi-2712",
            "binary_version": "1:6.12.47-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.47+rpt-rpi-v8",
            "binary_version": "1:6.12.47-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.47+rpt-rpi-v8-rt",
            "binary_version": "1:6.12.47-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.62+rpt-rpi-2712",
            "binary_version": "1:6.12.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.62+rpt-rpi-v8",
            "binary_version": "1:6.12.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.62+rpt-rpi-v8-rt",
            "binary_version": "1:6.12.62-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.75+rpt-rpi-2712",
            "binary_version": "1:6.12.75-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.75+rpt-rpi-v8",
            "binary_version": "1:6.12.75-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.12.75+rpt-rpi-v8-rt",
            "binary_version": "1:6.12.75-1+rpt1"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.12.47-1+rpt1": {
            "linux_commit": "359f37f0faefb712add32a39f98751aea67d5c1f",
            "upstream_version": "6.12.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.12.80"
          },
          "1:6.12.62-1+rpt1": {
            "linux_commit": "a1073743767f9e7fdc7017ababd2a07ea0c97c1c",
            "upstream_version": "6.12.62",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.12.80"
          },
          "1:6.12.75-1+rpt1": {
            "linux_commit": "89050b1059997d38d55462b323b099a6436dc10d",
            "upstream_version": "6.12.75",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.12.80"
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-31563"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/92e7081f0c79d9073087e54bab745bb184192c2e"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/78c8b090a3d5c1689dc989861b0163180db2b3f8"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/984350b37372f79f71d4f0a5264c640e40daf9ce"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/f4bc91398b579730284328322365afa77a9d568f"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/ca4d05afb4683d685bb2c6fccae4386c478f524a"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/647b8a2fe474474704110db6bd07f7a139e621eb"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-05T13:16:28Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 7.5,
      "cvss_v3_severity": "High",
      "scenario": "AV:N - An unauthenticated remote peer can cause an affected MACB/GEM Ethernet interface to transmit packets, such as TCP resets, ICMP replies, or service responses, which drives TX completion and reaches the vulnerable SKB-freeing path. This is reachable over the network in a reasonable internet-facing or routed embedded deployment.\nAC:L - Once the affected driver is active and the interface transmits traffic, the path is deterministic: TX completion schedules NAPI and calls the invalid `napi_consume_skb()` path with IRQs disabled. The attacker does not need to win a race or shape kernel memory.\nPR:N - No local account, capability, device node access, or authentication is needed when remote packets induce kernel-generated replies or service traffic through the affected NIC. The vulnerable code is in normal packet transmit completion, not a privileged control path.\nUI:N - No victim user action is required beyond the system having the affected network interface up. Remote traffic can trigger the transmit and completion path automatically.\nS:U - The impact is within the same kernel and host security authority. There is no VM escape, IOMMU boundary crossing, or separate security scope involved.\nC:N - The bug is an invalid SKB consume helper used in IRQ-disabled context and the fix only changes the freeing API. I found no evidence of out-of-bounds access, use-after-free, arbitrary read, or information disclosure.\nI:N - The vulnerable path does not corrupt attacker-controlled kernel memory or provide a write primitive; it frees the TX SKB through an unsafe-context helper. There is no supported basis for integrity impact beyond availability.\nA:H - The reachable failure is a kernel WARNING in softirq/BH handling, and on systems using `panic_on_warn` this becomes a kernel panic from unauthenticated network-triggered traffic. Under the required higher-severity rule, the availability impact is scored high for that reasonable deployment."
    }
  }
}
