CVE-2026-74517 (GCVE-0-2026-74517)

Vulnerability from cvelistv5 – Published: 2026-08-15 12:27 – Updated: 2026-08-17 05:48
VLAI
Title
KVM: x86: Cancel delayed I/O APIC EOI handling before destroying vCPUs
Summary
In the Linux kernel, the following vulnerability has been resolved: KVM: x86: Cancel delayed I/O APIC EOI handling before destroying vCPUs Cancel (and flush) the I/O APIC's delayed EOI handling work during the "pre VM destroy" phase, before vCPUs are destroyed, as processing the EOI broadcast will inject another IRQ if the line is asserted, i.e. will try to deliver an IRQ to the target vCPU(s). Canceling the work after vCPUs are destroyed leads to UAF if the delayed work is processed after vCPUs are destroyed. BUG: KASAN: slab-use-after-free in __kvm_irq_delivery_to_apic_fast+0x9bf/0xa20 arch/x86/kvm/lapic.c:1250 Read of size 8 at addr ffff8880499abea0 by task kworker/1:2/1218 CPU: 1 UID: 0 PID: 1218 Comm: kworker/1:2 Not tainted 7.1.0-rc7 #5 PREEMPT(lazy) Hardware name: QEMU Ubuntu 25.10 PC v2 (i440FX + PIIX, + 10.1 machine, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014 Workqueue: events kvm_ioapic_eoi_inject_work Call Trace: <TASK> __dump_stack lib/dump_stack.c:94 dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 print_report+0x139/0x4ad mm/kasan/report.c:482 kasan_report+0xe4/0x1d0 mm/kasan/report.c:595 __kvm_irq_delivery_to_apic_fast+0x9bf/0xa20 arch/x86/kvm/lapic.c:1250 __kvm_irq_delivery_to_apic+0xd8/0xbf0 arch/x86/kvm/lapic.c:1345 kvm_irq_delivery_to_apic arch/x86/kvm/lapic.h:129 ioapic_service+0x308/0x590 arch/x86/kvm/ioapic.c:492 kvm_ioapic_eoi_inject_work+0x13c/0x190 arch/x86/kvm/ioapic.c:532 process_one_work+0xa59/0x19a0 kernel/workqueue.c:3314 process_scheduled_works kernel/workqueue.c:3397 worker_thread+0x5eb/0xe50 kernel/workqueue.c:3478 kthread+0x370/0x450 kernel/kthread.c:436 ret_from_fork+0x72b/0xd30 arch/x86/kernel/process.c:158 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245 </TASK> Note, the VM is unreachable once kvm_destroy_vm() starts, and scheduling new work via kvm_ioapic_send_eoi() can only be done via KVM_RUN, i.e. requires a live vCPU. Alternatively, KVM could simply destroy the I/O APIC during the "pre" phase of VM destruction, but that gets more than a bit sketchy as KVM expects the I/O APIC to exist if ioapic_in_kernel() is true, and nested virtualization in particular has a bad habit of touching VM-scope state during vCPU destruction. E.g. attempting to free the PIC during the pre phase would lead to a NULL pointer dereference in kvm_cpu_has_extint(), and it's not hard to imagine the I/O APIC having a similar flaw.
Impacted products
Vendor Product Version CPE status
Linux Linux Affected: 17bcd714426386fda741a4bccd96a2870179344b , < ed56a6b58222f9c1f4115a0bd2788dd6ed6022e2 (git)
Affected: 17bcd714426386fda741a4bccd96a2870179344b , < 9910e835580fef3bef53b70241dd00c4bffad693 (git)
Affected: c60f5156e62d0be6c53373b623f16a9e37e2208e (git)
Affected: 6.12.41 , < 6.13 (semver)
guessed Create a notification for this product.
Linux Linux Affected: 6.14
Unaffected: 0 , < 6.14 (semver)
Unaffected: 7.1.8 , ≤ 7.1.* (semver)
Unaffected: 7.2 , ≤ * (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/x86/kvm/x86.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "lessThan": "ed56a6b58222f9c1f4115a0bd2788dd6ed6022e2",
              "status": "affected",
              "version": "17bcd714426386fda741a4bccd96a2870179344b",
              "versionType": "git"
            },
            {
              "lessThan": "9910e835580fef3bef53b70241dd00c4bffad693",
              "status": "affected",
              "version": "17bcd714426386fda741a4bccd96a2870179344b",
              "versionType": "git"
            },
            {
              "status": "affected",
              "version": "c60f5156e62d0be6c53373b623f16a9e37e2208e",
              "versionType": "git"
            },
            {
              "lessThan": "6.13",
              "status": "affected",
              "version": "6.12.41",
              "versionType": "semver"
            }
          ]
        },
        {
          "defaultStatus": "affected",
          "product": "Linux",
          "programFiles": [
            "arch/x86/kvm/x86.c"
          ],
          "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
          "vendor": "Linux",
          "versions": [
            {
              "status": "affected",
              "version": "6.14"
            },
            {
              "lessThan": "6.14",
              "status": "unaffected",
              "version": "0",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "7.1.*",
              "status": "unaffected",
              "version": "7.1.8",
              "versionType": "semver"
            },
            {
              "lessThanOrEqual": "*",
              "status": "unaffected",
              "version": "7.2",
              "versionType": "original_commit_for_fix"
            }
          ]
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.1.8",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "7.2",
                  "versionStartIncluding": "6.14",
                  "vulnerable": true
                },
                {
                  "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
                  "versionStartIncluding": "6.12.41",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ]
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nKVM: x86: Cancel delayed I/O APIC EOI handling before destroying vCPUs\n\nCancel (and flush) the I/O APIC\u0027s delayed EOI handling work during the\n\"pre VM destroy\" phase, before vCPUs are destroyed, as processing the EOI\nbroadcast will inject another IRQ if the line is asserted, i.e. will try\nto deliver an IRQ to the target vCPU(s).  Canceling the work after vCPUs\nare destroyed leads to UAF if the delayed work is processed after vCPUs are\ndestroyed.\n\n  BUG: KASAN: slab-use-after-free in __kvm_irq_delivery_to_apic_fast+0x9bf/0xa20 arch/x86/kvm/lapic.c:1250\n  Read of size 8 at addr ffff8880499abea0 by task kworker/1:2/1218\n\n  CPU: 1 UID: 0 PID: 1218 Comm: kworker/1:2 Not tainted 7.1.0-rc7 #5 PREEMPT(lazy)\n  Hardware name: QEMU Ubuntu 25.10 PC v2 (i440FX + PIIX, + 10.1 machine, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\n  Workqueue: events kvm_ioapic_eoi_inject_work\n  Call Trace:\n   \u003cTASK\u003e\n   __dump_stack lib/dump_stack.c:94\n   dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120\n   print_address_description mm/kasan/report.c:378\n   print_report+0x139/0x4ad mm/kasan/report.c:482\n   kasan_report+0xe4/0x1d0 mm/kasan/report.c:595\n   __kvm_irq_delivery_to_apic_fast+0x9bf/0xa20 arch/x86/kvm/lapic.c:1250\n   __kvm_irq_delivery_to_apic+0xd8/0xbf0 arch/x86/kvm/lapic.c:1345\n   kvm_irq_delivery_to_apic arch/x86/kvm/lapic.h:129\n   ioapic_service+0x308/0x590 arch/x86/kvm/ioapic.c:492\n   kvm_ioapic_eoi_inject_work+0x13c/0x190 arch/x86/kvm/ioapic.c:532\n   process_one_work+0xa59/0x19a0 kernel/workqueue.c:3314\n   process_scheduled_works kernel/workqueue.c:3397\n   worker_thread+0x5eb/0xe50 kernel/workqueue.c:3478\n   kthread+0x370/0x450 kernel/kthread.c:436\n   ret_from_fork+0x72b/0xd30 arch/x86/kernel/process.c:158\n   ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245\n   \u003c/TASK\u003e\n\nNote, the VM is unreachable once kvm_destroy_vm() starts, and scheduling\nnew work via kvm_ioapic_send_eoi() can only be done via KVM_RUN, i.e.\nrequires a live vCPU.\n\nAlternatively, KVM could simply destroy the I/O APIC during the \"pre\" phase\nof VM destruction, but that gets more than a bit sketchy as KVM expects the\nI/O APIC to exist if ioapic_in_kernel() is true, and nested virtualization\nin particular has a bad habit of touching VM-scope state during vCPU\ndestruction.  E.g. attempting to free the PIC during the pre phase would\nlead to a NULL pointer dereference in kvm_cpu_has_extint(), and it\u0027s not\nhard to imagine the I/O APIC having a similar flaw."
        }
      ],
      "metrics": [
        {
          "cvssV3_1": {
            "baseScore": 9.3,
            "baseSeverity": "CRITICAL",
            "vectorString": "CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
            "version": "3.1"
          },
          "scenarios": [
            {
              "lang": "en",
              "value": "AV:L - The vulnerable I/O APIC delayed-EOI workqueue path is reached from host-local KVM ioctls (KVM_CREATE_IRQCHIP/KVM_RUN) and vCPU MMIO/EOI handling during in-kernel irqchip operation; it is not exposed via any network-facing kernel service.\nAC:L - The slab UAF is attacker-driven: a guest can trigger 10,000 level-triggered IOAPIC EOIs to schedule the delayed work, then immediately halt/exit so the VMM tears down the VM while that work is still pending, controlling both sides of the race.\nPR:N - A malicious KVM guest on cloud or hosted x86 VMs can trigger the EOI storm and controlled teardown without host root/CAP_SYS_ADMIN; only normal VM tenancy is needed, as guest halt causes the VMM to destroy the VM and run kvm_destroy_vm().\nUI:N - No action from another user or administrator is required; the attacker controls guest interrupt/EOI behavior and the timing of guest shutdown that prompts automatic VM destruction on typical hypervisors (QEMU/KVM, cloud instances).\nS:C - Use-after-free of host-kernel vCPU/LAPIC objects during IRQ delivery from pending IOAPIC delayed work crosses the KVM virtual-machine boundary and can enable guest-to-host kernel compromise on multi-tenant cloud and enterprise virtualization hosts.\nC:H - KASAN confirmed a slab use-after-free reading freed vCPU/LAPIC pointers in __kvm_irq_delivery_to_apic_fast(); this UAF on host heap objects enables arbitrary kernel memory disclosure via controlled realloc/spray of the freed kvm_vcpu slab.\nI:H - The UAF dereferences freed vCPU state to inject APIC interrupts via kvm_apic_set_irq(), corrupting host kernel heap objects and providing write primitives exploitable for host code execution and VM escape.\nA:H - Processing the delayed EOI work after vCPU destruction causes host kernel use-after-free during IRQ injection, reliably triggering KASAN-detected slab corruption and potential host kernel oops/panic on production KVM hypervisors."
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-17T05:48:09.016Z",
        "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
        "shortName": "Linux"
      },
      "references": [
        {
          "url": "https://git.kernel.org/stable/c/ed56a6b58222f9c1f4115a0bd2788dd6ed6022e2"
        },
        {
          "url": "https://git.kernel.org/stable/c/9910e835580fef3bef53b70241dd00c4bffad693"
        }
      ],
      "title": "KVM: x86: Cancel delayed I/O APIC EOI handling before destroying vCPUs",
      "x_generator": {
        "engine": "bippy-1.2.0"
      }
    }
  },
  "cveMetadata": {
    "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
    "assignerShortName": "Linux",
    "cveId": "CVE-2026-74517",
    "datePublished": "2026-08-15T12:27:36.842Z",
    "dateReserved": "2026-08-15T05:44:03.910Z",
    "dateUpdated": "2026-08-17T05:48:09.016Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-74517",
      "date": "2026-08-18",
      "epss": "0.00131",
      "percentile": "0.03154"
    },
    "nvd": "{\"cve\":{\"id\":\"CVE-2026-74517\",\"sourceIdentifier\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"published\":\"2026-08-15T13:17:56.850\",\"lastModified\":\"2026-08-17T06:19:48.450\",\"vulnStatus\":\"Received\",\"cveTags\":[],\"descriptions\":[{\"lang\":\"en\",\"value\":\"In the Linux kernel, the following vulnerability has been resolved:\\n\\nKVM: x86: Cancel delayed I/O APIC EOI handling before destroying vCPUs\\n\\nCancel (and flush) the I/O APIC\u0027s delayed EOI handling work during the\\n\\\"pre VM destroy\\\" phase, before vCPUs are destroyed, as processing the EOI\\nbroadcast will inject another IRQ if the line is asserted, i.e. will try\\nto deliver an IRQ to the target vCPU(s).  Canceling the work after vCPUs\\nare destroyed leads to UAF if the delayed work is processed after vCPUs are\\ndestroyed.\\n\\n  BUG: KASAN: slab-use-after-free in __kvm_irq_delivery_to_apic_fast+0x9bf/0xa20 arch/x86/kvm/lapic.c:1250\\n  Read of size 8 at addr ffff8880499abea0 by task kworker/1:2/1218\\n\\n  CPU: 1 UID: 0 PID: 1218 Comm: kworker/1:2 Not tainted 7.1.0-rc7 #5 PREEMPT(lazy)\\n  Hardware name: QEMU Ubuntu 25.10 PC v2 (i440FX + PIIX, + 10.1 machine, 1996), BIOS 1.16.3-debian-1.16.3-2 04/01/2014\\n  Workqueue: events kvm_ioapic_eoi_inject_work\\n  Call Trace:\\n   \u003cTASK\u003e\\n   __dump_stack lib/dump_stack.c:94\\n   dump_stack_lvl+0x100/0x190 lib/dump_stack.c:120\\n   print_address_description mm/kasan/report.c:378\\n   print_report+0x139/0x4ad mm/kasan/report.c:482\\n   kasan_report+0xe4/0x1d0 mm/kasan/report.c:595\\n   __kvm_irq_delivery_to_apic_fast+0x9bf/0xa20 arch/x86/kvm/lapic.c:1250\\n   __kvm_irq_delivery_to_apic+0xd8/0xbf0 arch/x86/kvm/lapic.c:1345\\n   kvm_irq_delivery_to_apic arch/x86/kvm/lapic.h:129\\n   ioapic_service+0x308/0x590 arch/x86/kvm/ioapic.c:492\\n   kvm_ioapic_eoi_inject_work+0x13c/0x190 arch/x86/kvm/ioapic.c:532\\n   process_one_work+0xa59/0x19a0 kernel/workqueue.c:3314\\n   process_scheduled_works kernel/workqueue.c:3397\\n   worker_thread+0x5eb/0xe50 kernel/workqueue.c:3478\\n   kthread+0x370/0x450 kernel/kthread.c:436\\n   ret_from_fork+0x72b/0xd30 arch/x86/kernel/process.c:158\\n   ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245\\n   \u003c/TASK\u003e\\n\\nNote, the VM is unreachable once kvm_destroy_vm() starts, and scheduling\\nnew work via kvm_ioapic_send_eoi() can only be done via KVM_RUN, i.e.\\nrequires a live vCPU.\\n\\nAlternatively, KVM could simply destroy the I/O APIC during the \\\"pre\\\" phase\\nof VM destruction, but that gets more than a bit sketchy as KVM expects the\\nI/O APIC to exist if ioapic_in_kernel() is true, and nested virtualization\\nin particular has a bad habit of touching VM-scope state during vCPU\\ndestruction.  E.g. attempting to free the PIC during the pre phase would\\nlead to a NULL pointer dereference in kvm_cpu_has_extint(), and it\u0027s not\\nhard to imagine the I/O APIC having a similar flaw.\"}],\"affected\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"affectedData\":[{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"unaffected\",\"programFiles\":[\"arch/x86/kvm/x86.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"17bcd714426386fda741a4bccd96a2870179344b\",\"lessThan\":\"ed56a6b58222f9c1f4115a0bd2788dd6ed6022e2\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"17bcd714426386fda741a4bccd96a2870179344b\",\"lessThan\":\"9910e835580fef3bef53b70241dd00c4bffad693\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"c60f5156e62d0be6c53373b623f16a9e37e2208e\",\"versionType\":\"git\",\"status\":\"affected\"},{\"version\":\"6.12.41\",\"lessThan\":\"6.13\",\"versionType\":\"semver\",\"status\":\"affected\"}]},{\"vendor\":\"Linux\",\"product\":\"Linux\",\"defaultStatus\":\"affected\",\"programFiles\":[\"arch/x86/kvm/x86.c\"],\"repo\":\"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\"versions\":[{\"version\":\"6.14\",\"status\":\"affected\"},{\"version\":\"0\",\"lessThan\":\"6.14\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.1.8\",\"lessThanOrEqual\":\"7.1.*\",\"versionType\":\"semver\",\"status\":\"unaffected\"},{\"version\":\"7.2\",\"lessThanOrEqual\":\"*\",\"versionType\":\"original_commit_for_fix\",\"status\":\"unaffected\"}]}]}],\"metrics\":{\"cvssMetricV31\":[{\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\",\"type\":\"Secondary\",\"cvssData\":{\"version\":\"3.1\",\"vectorString\":\"CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H\",\"baseScore\":9.3,\"baseSeverity\":\"CRITICAL\",\"attackVector\":\"LOCAL\",\"attackComplexity\":\"LOW\",\"privilegesRequired\":\"NONE\",\"userInteraction\":\"NONE\",\"scope\":\"CHANGED\",\"confidentialityImpact\":\"HIGH\",\"integrityImpact\":\"HIGH\",\"availabilityImpact\":\"HIGH\"},\"exploitabilityScore\":2.5,\"impactScore\":6.0}]},\"references\":[{\"url\":\"https://git.kernel.org/stable/c/9910e835580fef3bef53b70241dd00c4bffad693\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"},{\"url\":\"https://git.kernel.org/stable/c/ed56a6b58222f9c1f4115a0bd2788dd6ed6022e2\",\"source\":\"416baaa9-dc9f-4396-8d5f-8c081fb06d67\"}]}}",
    "suse_vex": {
      "aggregate_severity": "critical",
      "current_release_date": "2026-08-18T00:07:37Z",
      "cve": "CVE-2026-74517",
      "id": "CVE-2026-74517",
      "initial_release_date": "2026-08-15T23:51:09Z",
      "source": "SUSE CSAF VEX",
      "status": "interim",
      "title": "SUSE CVE CVE-2026-74517",
      "url": "https://ftp.suse.com/pub/projects/security/csaf-vex/cve-2026-74517.json",
      "version": "3"
    }
  }
}



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…

Detection rules are retrieved from Rulezet.

Loading…

Loading…

Loading…