{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2024-47747",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2024-47747"
  ],
  "published": "2024-10-21T12:16:24Z",
  "summary": "net: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: seeq: Fix use after free vulnerability in ether3 Driver Due to Race Condition\n\nIn the ether3_probe function, a timer is initialized with a callback\nfunction ether3_ledoff, bound to &prev(dev)->timer. Once the timer is\nstarted, there is a risk of a race condition if the module or device\nis removed, triggering the ether3_remove function to perform cleanup.\nThe sequence of operations that may lead to a UAF bug is as follows:\n\nCPU0                                    CPU1\n\n                      |  ether3_ledoff\nether3_remove         |\n  free_netdev(dev);   |\n  put_devic           |\n  kfree(dev);         |\n |  ether3_outw(priv(dev)->regs.config2 |= CFG2_CTRLO, REG_CONFIG2);\n                      | // use dev\n\nFix it by ensuring that the timer is canceled before proceeding with\nthe cleanup in ether3_remove.",
  "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.113",
            "compiled_filter": false
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2024-47747"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/25d559ed2beec9b34045886100dac46d1ad92eba"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/b5a84b6c772564c8359a9a0fbaeb2a2944aa1ee9"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/338a0582b28e69460df03af50e938b86b4206353"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/822c7bb1f6f8b0331e8d1927151faf8db3b33afd"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/1c57d61a43293252ad732007c7070fdb112545fd"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d2abc379071881798d20e2ac1d332ad855ae22f3"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/516dbc6d16637430808c39568cbb6b841d32b55b"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/77a77331cef0a219b8dd91361435eeef04cb741c"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/b5109b60ee4fcb2f2bb24f589575e10cc5283ad4"
    }
  ],
  "database_specific": {
    "source": "https://git.kernel.org/pub/scm/linux/security/vulns.git",
    "upstream_modified": "2026-08-05T11:52:36Z",
    "severity": {
      "source": "kernel CNA",
      "cvss_v3_score": 7.8,
      "cvss_v3_severity": "High",
      "scenario": "AV:L - The free side is a local operation (module unload or sysfs driver unbind on the ecard bus); Acorn podules are not runtime hot-pluggable, so there is no physical or remote path that triggers `ether3_remove()`. A remote peer can keep the LED timer armed via received frames, but local access is required to reach the vulnerable free.\nAC:L - The attacker controls both sides of the race \u2014 traffic on the interface arms the 20 ms LED timer, and `ether3_close()` never cancels it, so a pending timer at `free_netdev()` time is essentially deterministic rather than a tight window. Heap grooming to reallocate the freed netdev is likewise under attacker control.\nPR:L - An unprivileged local user can drive the TX/RX paths that arm the timer and can spray the kernel heap to reclaim the freed `alloc_etherdev()` chunk, matching this CNA's scoring of the identical timer-not-cancelled-in-remove bug class. No capability check gates the attacker-controlled half of the race.\nUI:N - No victim action is needed beyond the driver teardown itself; once the timer is pending, the use-after-free fires automatically from softirq context roughly 20 ms later with no user involvement.\nS:U - The corruption is confined to kernel slab memory and kernel control flow \u2014 the same security authority that contains the flaw. There is no hypervisor, IOMMU, or sandbox boundary crossed.\nC:H - The callback reads `private->dev`, `priv(dev)->seeq`, and `regs.config2` out of freed memory; once that allocation is reclaimed, the driver operates on attacker- or victim-controlled contents, and the read-modify-write of `config2` plus the pointer-derived MMIO access provide an information-disclosure channel. Kernel use-after-free is scored High.\nI:H - `regs.config2 |= CFG2_CTRLO` writes back into the freed object, and the subsequent `writew()` targets `priv(dev)->seeq + 0x80` \u2014 an address sourced from freed memory. Reclaiming the allocation turns this into a 16-bit write to an attacker-chosen kernel address from softirq context, a control-flow-hijack-capable primitive.\nA:H - Even without successful reclaim, `ether3_ledoff()` dereferences poisoned/freed pointers and performs an I/O write through a garbage `seeq` pointer, producing an unhandled fault in timer softirq context \u2014 a kernel oops or panic. The freed `timer_list` also leaves the timer subsystem traversing released memory."
    }
  }
}
