{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2024-47748", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2024-09-30T16:00:12.960Z", "datePublished": "2024-10-21T12:14:14.448Z", "dateUpdated": "2026-08-05T11:39:56.054Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T11:39:56.054Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nvhost_vdpa: assign irq bypass producer token correctly\n\nWe used to call irq_bypass_unregister_producer() in\nvhost_vdpa_setup_vq_irq() which is problematic as we don't know if the\ntoken pointer is still valid or not.\n\nActually, we use the eventfd_ctx as the token so the life cycle of the\ntoken should be bound to the VHOST_SET_VRING_CALL instead of\nvhost_vdpa_setup_vq_irq() which could be called by set_status().\n\nFixing this by setting up irq bypass producer's token when handling\nVHOST_SET_VRING_CALL and un-registering the producer before calling\nvhost_vring_ioctl() to prevent a possible use after free as eventfd\ncould have been released in vhost_vring_ioctl(). And such registering\nand unregistering will only be done if DRIVER_OK is set." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The vulnerability is reached exclusively through `ioctl()` calls (`VHOST_SET_VRING_CALL`, `VHOST_VDPA_SET_STATUS`) on the `/dev/vhost-vdpa-N` character device. This requires local access to the host; no network or adjacent-network path exists.\nAC:L - The attacker deterministically drives the entire sequence with ordinary ioctls — set a call fd, set DRIVER_OK, reset to invalidate the MSI vector, then rebind a new call fd — and controls both the eventfd allocation and the eventfd free, so the slab reuse that makes the stale token collide is attacker-driven grooming rather than an uncontrolled condition. No race with an independent party is involved.\nPR:L - No capability check exists anywhere on the path; the sole gate is DAC on the vhost-vdpa device node, which in the standard libvirt/QEMU hypervisor deployment is held by an unprivileged VMM account. An attacker with that account — or one who has compromised the QEMU process from a guest — reaches the bug without root.\nUI:N - The attacker performs the complete ioctl sequence and eventfd grooming from their own process. No action by any other user or administrator is needed.\nS:U - The vulnerable component and the primary impacted component are both the host kernel, so the memory corruption stays within a single security authority. The knock-on effect on other guests' interrupt-remapping entries is a consequence of host-kernel compromise rather than an exploit that crosses the boundary as its defining characteristic.\nC:H - The freed eventfd_ctx pointer is retained as an identity key in a global registry shared with KVM, and the resulting mismatched connect/disconnect plus irqbypass module refcount underflow give the attacker use-after-free access to kernel objects and module memory. Per standard kernel scoring, a use-after-free grants control over freed-object contents and is treated as enabling arbitrary kernel memory disclosure.\nI:H - The stale token causes `__disconnect()`/`__connect()` against the wrong consumer, reprogramming IOMMU interrupt-remapping entries for an unrelated VM with a foreign device IRQ, while the double `list_del()` on an already-unlinked node provides a linked-list unlink write primitive and the module refcount underflow enables a UAF on module text. These are exploitable for kernel memory corruption and control-flow hijacking.\nA:H - Executing `list_del()` on a node bearing `LIST_POISON1/LIST_POISON2` faults immediately with a general protection fault, and the mismatched KVM producer teardown trips `WARN_ON` and corrupts posted-interrupt state. This is a reliable kernel oops/panic that also disrupts unrelated guests on the host." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/vhost/vdpa.c" ], "versions": [ { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "0c170b1e918b9afac25e2bbd01eaa2bfc0ece8c0", "status": "affected", "versionType": "git" }, { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "927a2580208e0f9b0b47b08f1c802b7233a7ba3c", "status": "affected", "versionType": "git" }, { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "ec5f1b54ceb23475049ada6e7a43452cf4df88d1", "status": "affected", "versionType": "git" }, { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "ca64edd7ae93402af2596a952e0d94d545e2b9c0", "status": "affected", "versionType": "git" }, { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "fae9b1776f53aab93ab345bdbf653b991aed717d", "status": "affected", "versionType": "git" }, { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "7cf2fb51175cafe01df8c43fa15a06194a59c6e2", "status": "affected", "versionType": "git" }, { "version": "2cf1ba9a4d15cb78b96ea97f727b93382c3f9a60", "lessThan": "02e9e9366fefe461719da5d173385b6685f70319", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/vhost/vdpa.c" ], "versions": [ { "version": "5.9", "status": "affected" }, { "version": "0", "lessThan": "5.9", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.227", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.168", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.113", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.54", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.10.13", "lessThanOrEqual": "6.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.11.2", "lessThanOrEqual": "6.11.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "5.10.227" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "5.15.168" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "6.1.113" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "6.6.54" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "6.10.13" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "6.11.2" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "5.9", "versionEndExcluding": "6.12" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/0c170b1e918b9afac25e2bbd01eaa2bfc0ece8c0" }, { "url": "https://git.kernel.org/stable/c/927a2580208e0f9b0b47b08f1c802b7233a7ba3c" }, { "url": "https://git.kernel.org/stable/c/ec5f1b54ceb23475049ada6e7a43452cf4df88d1" }, { "url": "https://git.kernel.org/stable/c/ca64edd7ae93402af2596a952e0d94d545e2b9c0" }, { "url": "https://git.kernel.org/stable/c/fae9b1776f53aab93ab345bdbf653b991aed717d" }, { "url": "https://git.kernel.org/stable/c/7cf2fb51175cafe01df8c43fa15a06194a59c6e2" }, { "url": "https://git.kernel.org/stable/c/02e9e9366fefe461719da5d173385b6685f70319" } ], "title": "vhost_vdpa: assign irq bypass producer token correctly", "x_generator": { "engine": "bippy-1.2.0" } }, "adp": [ { "metrics": [ { "other": { "type": "ssvc", "content": { "id": "CVE-2024-47748", "role": "CISA Coordinator", "options": [ { "Exploitation": "none" }, { "Automatable": "no" }, { "Technical Impact": "partial" } ], "version": "2.0.3", "timestamp": "2024-10-21T12:58:17.248658Z" } } } ], "title": "CISA ADP Vulnrichment", "providerMetadata": { "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "shortName": "CISA-ADP", "dateUpdated": "2024-10-21T13:04:13.447Z" } }, { "title": "CVE Program Container", "references": [ { "url": "https://lists.debian.org/debian-lts-announce/2025/03/msg00002.html" }, { "url": "https://lists.debian.org/debian-lts-announce/2025/01/msg00001.html" } ], "providerMetadata": { "orgId": "af854a3a-2127-422b-91ae-364da2661108", "shortName": "CVE", "dateUpdated": "2025-11-03T22:21:42.762Z" } } ] } }