{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2024-47727",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2024-47727"
  ],
  "published": "2024-10-21T12:16:24Z",
  "summary": "x86/tdx: Fix \"in-kernel MMIO\" check",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nx86/tdx: Fix \"in-kernel MMIO\" check\n\nTDX only supports kernel-initiated MMIO operations. The handle_mmio()\nfunction checks if the #VE exception occurred in the kernel and rejects\nthe operation if it did not.\n\nHowever, userspace can deceive the kernel into performing MMIO on its\nbehalf. For example, if userspace can point a syscall to an MMIO address,\nsyscall does get_user() or put_user() on it, triggering MMIO #VE. The\nkernel will treat the #VE as in-kernel MMIO.\n\nEnsure that the target MMIO address is within the kernel before decoding\ninstruction.",
  "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-47727"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/25703a3c980e21548774eea8c8a87a75c5c8f58c"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/4c0c5dcb5471de5fc8f0a1c4980e5815339e1cee"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/18ecd5b74682839e7cdafb7cd1ec106df7baa18c"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/bca2e29f7e26ce7c3522f8b324c0bd85612f68e3"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/d4fc4d01471528da8a9797a065982e05090e1d81"
    }
  ],
  "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 - Exploitation requires a local process inside the TDX guest to issue syscalls with a pointer into an MMIO/host-visible mapping; there is no network-reachable path to the #VE handler.\nAC:L - The attacker fully controls both the mapping and the syscall pointer, and get_user()/put_user() emit exactly the mov encodings that insn_decode_mmio() accepts, so the MMIO hypercall is triggered deterministically with no race or unpredictable state.\nPR:L - An ordinary unprivileged guest account suffices \u2014 any mapping of a device BAR or of DMA-coherent (decrypted/shared) memory exposed by a driver mmap works, and the untrusted VMM can force EPT-violation #VEs on shared pages at will.\nUI:N - The attacking process performs the mmap and the syscall itself; no other user or victim action is involved.\nS:U - The boundary bypassed is guest-userspace to guest-kernel within the same OS authority; this is not a guest-to-host escape or an IOMMU/DMA boundary bypass.\nC:H - Userspace obtains an unauthorized MMIO read primitive against device registers and forces kernel-context data out through TDVMCALL to the untrusted VMM, defeating the TD confidentiality guarantee; it is also the reachable path to the uninitialized-stack leak in mmio_read().\nI:H - The bug yields an unprivileged MMIO write primitive to device/hypervisor-visible registers (doorbells, DMA and control registers), and VMM-supplied read data is written directly into the kernel's pt_regs and acted upon mid-syscall.\nA:H - Unauthorized MMIO writes can misprogram or wedge virtual devices, and the userspace-reachable WARN_ON_ONCE()/-EIO paths reach ve_raise_fault() and die_addr(), producing an oops or a full panic under panic_on_warn."
    }
  }
}
