{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2026-74548",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2026-74548"
  ],
  "published": "2026-08-15T12:28:42Z",
  "summary": "forcedeth: fix UAF of txrx_stats in nv_remove",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nforcedeth: fix UAF of txrx_stats in nv_remove\n\nnv_remove() frees the per-CPU txrx_stats before unregister_netdev().\nUntil unregister completes, ndo_get_stats64, the NAPI/xmit data path,\nand nv_close()/drain may still access txrx_stats, leading to a\nuse-after-free.\n\nFree the stats only after unregister_netdev().",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.1.47-1+rpt4"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-2712",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v6",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v7l",
            "binary_version": "1:6.1.47-1+rpt4"
          },
          {
            "binary_name": "linux-image-6.1.0-rpi3-rpi-v8",
            "binary_version": "1:6.1.47-1+rpt4"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.1.47-1+rpt4": {
            "linux_commit": "655fc658a15ae7a6f37103754adb39ba52a9a14e",
            "upstream_version": "6.1.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.1.183",
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2026-74548"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/cdf864d5d3c813ae1876f2bacc1cf3ac3c66dfc9"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/7c22b4ee0bd003cecfc14ca28981cb213e201f70"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d51ce7a63b76eda02cabfed1b0cc277b2f5c9bcc"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/cf2dcde2284562ff87830ca0b7fa2b06e95aef1e"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/c9d24a205fd508b9999fcab6aca4c590490a12cf"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/ae20a8a4de06a289d40b0a0633d8d573f1fcb049"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/201e05aa531eba0dfe2ee05b4e178f6ffa12c8b1"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/22666ba1420164753d7b0f5a841986b25ace5435"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-19T16:47:12Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 7.8,
      "cvss_v3_severity": "High",
      "scenario": "AV:L - The UAF is opened in nv_remove() during local PCI/driver teardown (sysfs unbind, module unload, or hot-unplug); although NAPI/xmit and stats readers can run concurrently on still-registered netdev traffic, there is no standalone remote path into nv_remove itself.\nAC:L - Once teardown starts, unregister_netdev() deterministically calls nv_close()\u2192nv_drain_tx(), which increments freed txrx_stats when TX skbs remain, and an attacker can also drive the race by timing unbind against stats polling or packet I/O they control.\nPR:L - Privileged teardown opens the window, but unprivileged peers can supply the concurrent netdev access (rtnetlink/sysfs stats via nv_get_stats64, and RX/TX on the still-up interface) that performs the UAF; per CNA driver-removal UAF precedent and the higher-severity tiebreak, PR:L.\nUI:N - No separate victim action is required beyond routine driver removal or module unload on a live interface; monitoring daemons and network traffic can hit the freed stats automatically during the unregister window without user cooperation.\nS:U - Impact is kernel heap corruption and crash/privilege escalation within the host kernel security authority; it does not cross VM, hypervisor, IOMMU, or container sandbox boundaries.\nC:H - The bug is a kmalloc-backed per-CPU UAF: nv_get_stats64 reads freed nv_txrx_stats counters via per_cpu_ptr(), and once the slab is reallocated an attacker can obtain arbitrary kernel memory disclosure.\nI:H - Freed txrx_stats are updated from NAPI/xmit and nv_drain_tx() via __this_cpu_inc/add on attacker-influenced traffic, enabling heap grooming and controlled writes through the dangling per-CPU pointer for code execution.\nA:H - Use-after-free dereferences of txrx_stats during netdev teardown reliably cause kernel oops/panic (as in the fix description), and even unsuccessful exploitation still crashes the system when concurrent RX/TX or drain paths touch freed memory."
    }
  }
}
