{
  "schema_version": "1.6.1",
  "id": "RPI-CVE-2024-50139",
  "modified": "2026-10-09T11:39:44Z",
  "upstream": [
    "CVE-2024-50139"
  ],
  "published": "2024-11-07T09:34:57Z",
  "summary": "KVM: arm64: Fix shift-out-of-bounds bug",
  "details": "In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: arm64: Fix shift-out-of-bounds bug\n\nFix a shift-out-of-bounds bug reported by UBSAN when running\nVM with MTE enabled host kernel.\n\nUBSAN: shift-out-of-bounds in arch/arm64/kvm/sys_regs.c:1988:14\nshift exponent 33 is too large for 32-bit type 'int'\nCPU: 26 UID: 0 PID: 7629 Comm: qemu-kvm Not tainted 6.12.0-rc2 #34\nHardware name: IEI NF5280R7/Mitchell MB, BIOS 00.00. 2024-10-12 09:28:54 10/14/2024\nCall trace:\n dump_backtrace+0xa0/0x128\n show_stack+0x20/0x38\n dump_stack_lvl+0x74/0x90\n dump_stack+0x18/0x28\n __ubsan_handle_shift_out_of_bounds+0xf8/0x1e0\n reset_clidr+0x10c/0x1c8\n kvm_reset_sys_regs+0x50/0x1c8\n kvm_reset_vcpu+0xec/0x2b0\n __kvm_vcpu_set_target+0x84/0x158\n kvm_vcpu_set_target+0x138/0x168\n kvm_arch_vcpu_ioctl_vcpu_init+0x40/0x2b0\n kvm_arch_vcpu_ioctl+0x28c/0x4b8\n kvm_vcpu_ioctl+0x4bc/0x7a8\n __arm64_sys_ioctl+0xb4/0x100\n invoke_syscall+0x70/0x100\n el0_svc_common.constprop.0+0x48/0xf0\n do_el0_svc+0x24/0x38\n el0_svc+0x3c/0x158\n el0t_64_sync_handler+0x120/0x130\n el0t_64_sync+0x194/0x198",
  "severity": [
    {
      "type": "CVSS_V3",
      "score": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:H"
    }
  ],
  "affected": [
    {
      "package": {
        "ecosystem": "Raspberry Pi OS:12",
        "name": "linux"
      },
      "versions": [
        "1:6.6.20-1+rpt1",
        "1:6.6.28-1+rpt1",
        "1:6.6.31-1+rpt1",
        "1:6.6.47-1+rpt1",
        "1:6.6.51-1+rpt1",
        "1:6.6.51-1+rpt2",
        "1:6.6.51-1+rpt3"
      ],
      "ecosystem_specific": {
        "binaries": [
          {
            "binary_name": "linux-image-6.6.20+rpt-rpi-2712",
            "binary_version": "1:6.6.20-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.20+rpt-rpi-v8",
            "binary_version": "1:6.6.20-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.28+rpt-rpi-2712",
            "binary_version": "1:6.6.28-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.28+rpt-rpi-v8",
            "binary_version": "1:6.6.28-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.31+rpt-rpi-2712",
            "binary_version": "1:6.6.31-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.31+rpt-rpi-v8",
            "binary_version": "1:6.6.31-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.47+rpt-rpi-2712",
            "binary_version": "1:6.6.47-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.47+rpt-rpi-v8",
            "binary_version": "1:6.6.47-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-2712",
            "binary_version": "1:6.6.51-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-v8",
            "binary_version": "1:6.6.51-1+rpt1"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-2712",
            "binary_version": "1:6.6.51-1+rpt2"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-v8",
            "binary_version": "1:6.6.51-1+rpt2"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-2712",
            "binary_version": "1:6.6.51-1+rpt3"
          },
          {
            "binary_name": "linux-image-6.6.51+rpt-rpi-v8",
            "binary_version": "1:6.6.51-1+rpt3"
          }
        ]
      },
      "database_specific": {
        "per_version": {
          "1:6.6.20-1+rpt1": {
            "linux_commit": "6f16847710cc0502450788b9f12f0a14d3429668",
            "upstream_version": "6.6.20",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          },
          "1:6.6.28-1+rpt1": {
            "linux_commit": "0c341f47adc3578cd5f817aa20ee2b7f9ae6b23e",
            "upstream_version": "6.6.28",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          },
          "1:6.6.31-1+rpt1": {
            "linux_commit": "c1432b4bae5b6582f4d32ba381459f33c34d1424",
            "upstream_version": "6.6.31",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          },
          "1:6.6.47-1+rpt1": {
            "linux_commit": "cf64a1dfecc2dc418efdd61701c1a4b185ab4761",
            "upstream_version": "6.6.47",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          },
          "1:6.6.51-1+rpt1": {
            "linux_commit": "0094eba3f2a4338cfa6854b0b5104d02ba0fa01f",
            "upstream_version": "6.6.51",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          },
          "1:6.6.51-1+rpt2": {
            "linux_commit": "82a50e430ef1d6eb37d78e25aa572c1f6ea56160",
            "upstream_version": "6.6.51",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          },
          "1:6.6.51-1+rpt3": {
            "linux_commit": "5aeecea9f4a45248bcf564dec924965e066a7bfd",
            "upstream_version": "6.6.51",
            "assessment": "commit ancestry (strak rule)",
            "upstream_fixed": "6.6.59"
          }
        }
      }
    }
  ],
  "references": [
    {
      "type": "ADVISORY",
      "url": "https://www.cve.org/CVERecord?id=CVE-2024-50139"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/04ed2ba07ce73f323052475fbd33d647aca3ff2e"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/4b9e11794d910aa55300debbac5f0adcc42c491a"
    },
    {
      "type": "FIX",
      "url": "https://git.kernel.org/stable/c/c6c167afa090ea0451f91814e1318755a8fb8bb9"
    }
  ],
  "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.9,
      "cvss_v3_severity": "High",
      "scenario": "AV:L - The vulnerable code is reached through `ioctl(KVM_ARM_VCPU_INIT)` on a local `/dev/kvm` vCPU file descriptor, or from a local VM guest via a PSCI CPU_ON SMC that queues `KVM_REQ_VCPU_RESET`. No network protocol is involved on either path.\nAC:L - The out-of-bounds shift is fully deterministic \u2014 no race, no memory-layout dependency, no timing window; the attacker simply enables `KVM_CAP_ARM_MTE` and initializes a vCPU, and the shift executes unconditionally under `kvm_has_mte()`.\nPR:L - No capability check exists anywhere along the path \u2014 only an open `/dev/kvm` descriptor, which unprivileged members of the `kvm` group hold on standard distributions, or control of a guest for the PSCI path. Not PR:N, since some local foothold is required.\nUI:N - Triggering requires only the attacker's own ioctl sequence or an SMC issued from inside a VM they already control; no action by any other user or administrator is needed.\nS:C - The defect crosses the host/guest security boundary in both directions \u2014 the host hypervisor writes architecturally-invalid CPU state into the guest, and via the guest-reachable PSCI `CPU_ON` path a VM-confined attacker drives a UBSAN violation in host kernel context, which under `CONFIG_UBSAN_TRAP` or `panic_on_warn` takes down the host and every co-resident VM.\nC:L - There is no out-of-bounds read or memory disclosure primitive, but the UBSAN report and the `die()`/oops path dump host kernel addresses and a full backtrace to the kernel log, giving a bounded kernel-pointer leak that undermines KASLR for a locally-triggering attacker.\nI:L - The hypervisor stores a corrupted `CLIDR_EL1` with a reserved `Ctype` encoding and missing MTE `Ttypen` fields into guest-visible CPU state, so protected data across the boundary is modified \u2014 but the written value is fixed and not attacker-controlled, and there is no write primitive or control-flow hijack.\nA:H - `ubsan_epilogue()` calls `check_panic_on_warn(\"UBSAN\")`, panicking the host on the widely deployed `panic_on_warn=1` setting, and `CONFIG_UBSAN_TRAP=y` turns the shift into a BRK handled by `die()` in kernel context while `kvm->arch.config_lock` is held \u2014 a host kernel crash that destroys all running guests."
    }
  }
}
