CVE-2026-89907 (GCVE-0-2026-89907)
Vulnerability from cvelistv5
Published
2026-09-16 10:32
Modified
2026-10-19 08:54
Summary
In the Linux kernel, the following vulnerability has been resolved: LoongArch: KVM: Validate MSI data before routing it to EIOINTC pch_msi_set_irq() passes e->msi.data straight into eiointc_set_irq() as the irq number. The MSI data comes from userspace, that either via a KVM_IRQ_ROUTING_MSI entry set with KVM_SET_GSI_ROUTING (used by irqfd and KVM_IRQ_LINE) or directly via KVM_SIGNAL_MSI, and is never checked against EIOINTC_IRQS. eiointc_set_irq() uses the value with __set_bit()/__clear_bit() on the 256-bit isr bitmap, eiointc_update_irq() then indexes sw_coremap[] and the per-cpu coreisr/sw_coreisr bitmaps with it. Therefore a data value >= 256 reads and writes memory past the end of those arrays, i.e. any process holding a VM fd can corrupt kernel memory beyond the allocation of loongarch_eiointc. Reject MSI data that doesn't fit in the EIOINTC irq space. The DMSINTC path is unaffected as it decodes the vector from the address and masks it.
Impacted products
Vendor Product Version
Linux Linux Version: 1928254c5ccb7bdffd7f0334e1ce250e9ce4de94
Version: 1928254c5ccb7bdffd7f0334e1ce250e9ce4de94
Version: 1928254c5ccb7bdffd7f0334e1ce250e9ce4de94
Create a notification for this product.
Show details on NVD website


{
  "containers": {
    "cna": {
      "affected": [
        {
          "defaultStatus": "unaffected",
          "product": "Linux",
          "programFiles": [
            "arch/loongarch/kvm/intc/pch_pic.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "506f03b5f869cbae50d31b50d80d4a5735d47f94",
              "status": "affected",
              "version": "1928254c5ccb7bdffd7f0334e1ce250e9ce4de94",
              "versionType": "git"
            },
            {
              "lessThan": "83715a40a2d30d23719e0b25380ba82ff905195b",
              "status": "affected",
              "version": "1928254c5ccb7bdffd7f0334e1ce250e9ce4de94",
              "versionType": "git"
            },
            {
              "lessThan": "501514d6ebd2111c353a1296f25dbe22fbd64657",
              "status": "affected",
              "version": "1928254c5ccb7bdffd7f0334e1ce250e9ce4de94",
              "versionType": "git"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/loongarch/kvm/intc/pch_pic.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.13"
            },
            {
              "lessThan": "6.13",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "6.18.*",
              "status": "unaffected",
              "version": "6.18.57",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "6.18.57",
                  "versionStartIncluding": "6.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2.5",
                  "versionStartIncluding": "6.13",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.3",
                  "versionStartIncluding": "6.13",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nLoongArch: KVM: Validate MSI data before routing it to EIOINTC\n\npch_msi_set_irq() passes e-\u003emsi.data straight into eiointc_set_irq() as\nthe irq number. The MSI data comes from userspace, that either via a\nKVM_IRQ_ROUTING_MSI entry set with KVM_SET_GSI_ROUTING (used by irqfd\nand KVM_IRQ_LINE) or directly via KVM_SIGNAL_MSI, and is never checked\nagainst EIOINTC_IRQS.\n\neiointc_set_irq() uses the value with __set_bit()/__clear_bit() on the\n256-bit isr bitmap, eiointc_update_irq() then indexes sw_coremap[] and\nthe per-cpu coreisr/sw_coreisr bitmaps with it. Therefore a data value\n\u003e= 256 reads and writes memory past the end of those arrays, i.e. any\nprocess holding a VM fd can corrupt kernel memory beyond the allocation\nof loongarch_eiointc.\n\nReject MSI data that doesn\u0027t fit in the EIOINTC irq space. The DMSINTC\npath is unaffected as it decodes the vector from the address and masks\nit."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 8.8,
            "baseSeverity": "HIGH",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - pch_msi_set_irq() is reached only via local KVM VM-fd ioctls on /dev/kvm: KVM_SIGNAL_MSI, or KVM_SET_GSI_ROUTING with a KVM_IRQ_ROUTING_MSI entry then irqfd/KVM_IRQ_LINE. No network, Bluetooth, or physical path supplies the unbounded MSI data.\nAC:L - A single KVM_SIGNAL_MSI (or irqfd injection after installing a KVM_IRQ_ROUTING_MSI entry) with attacker-chosen msi.data \u003e= 256 deterministically drives __set_bit()/__clear_bit() on isr and indexes sw_coremap[] past EIOINTC_IRQS; the attacker fully controls the irq index with no race or uncontrollable layout.\nPR:L - Exploitation requires only opening /dev/kvm and holding a VM fd (kvm-group membership on typical LoongArch hosts, or equivalent unprivileged VM access), then creating the in-kernel EIOINTC/PCH-PIC/IPI devices. Init-namespace root is not required.\nUI:N - No victim interaction is required. The attacker creates the in-kernel LoongArch irqchip devices on a VM they control and issues KVM_SIGNAL_MSI or irqfd themselves; no mount, file open, or other user action is needed.\nS:C - A KVM VM operator corrupts host kernel memory beyond the loongarch_eiointc allocation from the KVM userspace interface, crossing the VM-to-host virtualization boundary rather than confining impact to the attacker\u0027s VM security scope.\nC:H - Unbounded msi.data causes out-of-bounds __set_bit()/__clear_bit() on the 256-bit isr bitmap and an out-of-bounds sw_coremap[irq] read past the loongarch_eiointc object. Per kernel guidance such OOB memory corruption is High confidentiality impact.\nI:H - The attacker fully controls the bit index via 32-bit MSI data, yielding arbitrary-offset bit set/clear from s-\u003eisr and further OOB writes into coreisr/sw_coreisr when a valid vCPU id is observed. That out-of-bounds write is usable for host privilege escalation.\nA:H - Indexing the EIOINTC bitmaps and sw_coremap[] with irq \u003e= 256 can immediately oops or panic the host kernel, and corrupting adjacent slab objects breaks later irq injection, denying service to the host and co-resident VMs."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-10-19T08:54:39.939Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/506f03b5f869cbae50d31b50d80d4a5735d47f94"
        },
        {
          "url": "https://git.kernel.org/stable/c/83715a40a2d30d23719e0b25380ba82ff905195b"
        },
        {
          "url": "https://git.kernel.org/stable/c/501514d6ebd2111c353a1296f25dbe22fbd64657"
        }
      ],
      "title": "LoongArch: KVM: Validate MSI data before routing it to EIOINTC",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-89907",
    "datePublished": "2026-09-16T10:32:05.925Z",
    "dateReserved": "2026-09-11T19:38:34.774Z",
    "dateUpdated": "2026-10-19T08:54:39.939Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2"
}


Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Sightings

Author Source Type Date

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or seen somewhere by the user.
  • Confirmed: The vulnerability is confirmed from an analyst perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: This vulnerability was exploited and seen by the user reporting the sighting.
  • Patched: This vulnerability was successfully patched by the user reporting the sighting.
  • Not exploited: This vulnerability was not exploited or seen by the user reporting the sighting.
  • Not confirmed: The user expresses doubt about the veracity of the vulnerability.
  • Not patched: This vulnerability was not successfully patched by the user reporting the sighting.


Loading…

Loading…