CVE-2026-89907 (GCVE-0-2026-89907)

Vulnerability from cvelistv5 – Published: 2026-09-16 10:32 – Updated: 2026-09-16 14:39
VLAI
Title
LoongArch: KVM: Validate MSI data before routing it to EIOINTC
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 CPE status
Linux Linux Affected: 1928254c5ccb7bdffd7f0334e1ce250e9ce4de94 , < 83715a40a2d30d23719e0b25380ba82ff905195b (git)
Affected: 1928254c5ccb7bdffd7f0334e1ce250e9ce4de94 , < 501514d6ebd2111c353a1296f25dbe22fbd64657 (git)
guessed Create a notification for this product.
Linux Linux Affected: 6.13
Unaffected: 0 , < 6.13 (semver)
Unaffected: 7.2.5 , ≤ 7.2.* (semver)
Unaffected: 7.3-rc2 , ≤ * (original_commit_for_fix)
guessed 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": "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": "7.2.*",
              "status": "unaffected",
              "version": "7.2.5",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.3-rc2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "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-rc2",
                  "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-09-16T14:39:57.195Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "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-09-16T14:39:57.195Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-89907",
      "date": "2026-09-25",
      "epss": "0.00165",
      "percentile": "0.05066"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "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": "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": "7.2.*",
                    "status": "unaffected",
                    "version": "7.2.5",
                    "versionType": "semver"
                  },
                  {
                    "lessThanOrEqual": "*",
                    "status": "unaffected",
                    "version": "7.3-rc2",
                    "versionType": "original_commit_for_fix"
                  }
                ]
              }
            ],
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
          }
        ],
        "cveTags": [],
        "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."
          }
        ],
        "id": "CVE-2026-89907",
        "lastModified": "2026-09-16T15:18:16.810",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "attackComplexity": "LOW",
                "attackVector": "LOCAL",
                "availabilityImpact": "HIGH",
                "baseScore": 8.8,
                "baseSeverity": "HIGH",
                "confidentialityImpact": "HIGH",
                "integrityImpact": "HIGH",
                "privilegesRequired": "LOW",
                "scope": "CHANGED",
                "userInteraction": "NONE",
                "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H",
                "version": "3.1"
              },
              "exploitabilityScore": 2.0,
              "impactScore": 6.0,
              "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
              "type": "Secondary"
            }
          ]
        },
        "published": "2026-09-16T11:16:59.703",
        "references": [
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/501514d6ebd2111c353a1296f25dbe22fbd64657"
          },
          {
            "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
            "url": "https://git.kernel.org/stable/c/83715a40a2d30d23719e0b25380ba82ff905195b"
          }
        ],
        "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "vulnStatus": "Received"
      }
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…