irqchip/gic-v3-its: Avoid truncating memory addresses
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 5.10.249, 5.15.199, 6.1.162, 6.6.122, 6.12.68, and 1 more
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: partial
Summary
In the Linux kernel, the following vulnerability has been resolved: irqchip/gic-v3-its: Avoid truncating memory addresses On 32-bit machines with CONFIG_ARM_LPAE, it is possible for lowmem allocations to be backed by addresses physical memory above the 32-bit address limit, as found while experimenting with larger VMSPLIT configurations. This caused the qemu virt model to crash in the GICv3 driver, which allocates the 'itt' object using GFP_KERNEL. Since all memory below the 4GB physical address limit is in ZONE_DMA in this configuration, kmalloc() defaults to higher addresses for ZONE_NORMAL, and the ITS driver stores the physical address in a 32-bit 'unsigned long' variable. Change the itt_addr variable to the correct phys_addr_t type instead, along with all other variables in this driver that hold a physical address. The gicv5 driver correctly uses u64 variables, while all other irqchip drivers don't call virt_to_phys or similar interfaces. It's expected that other device drivers have similar issues, but fixing this one is sufficient for booting a virtio based guest.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: partial
- Record last updated
Affected versions
- Linux Linux
From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in e332b3b69e5b3acf07204a4b185071bab15c2b88; From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in e2f9c751f73a2d5bb62d94ab030aec118a811f27; From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in 85215d633983233809f7d4dad163b953331b8238; From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in 1b323391560354d8c515de8658b057a1daa82adb; From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in 084ba3b99f2dfd991ce7e84fb17117319ec3cd9f; From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in 03faa61eb4b9ca9aa09bd91d4c3773d8e7b1ac98; From cc2d3216f53c9fff0030eb71cacc4ce5f39d1d7e · fixed in 8d76a7d89c12d08382b66e2f21f20d0627d14859
- Linux Linux
3.19
- KernelLinux
From 3.19.0 · fixed in 5.10.249; From 5.11.0 · fixed in 5.15.199; From 5.16.0 · fixed in 6.1.162; From 6.2.0 · fixed in 6.6.122; From 6.7.0 · fixed in 6.12.68; From 6.13.0 · fixed in 6.18.8
References 7
git.kernel.org
- stable/c/e332b3b69e5b3acf07204a4b185071bab15c2b88
- stable/c/e2f9c751f73a2d5bb62d94ab030aec118a811f27
- stable/c/85215d633983233809f7d4dad163b953331b8238
- stable/c/1b323391560354d8c515de8658b057a1daa82adb
- stable/c/084ba3b99f2dfd991ce7e84fb17117319ec3cd9f
- stable/c/03faa61eb4b9ca9aa09bd91d4c3773d8e7b1ac98
- stable/c/8d76a7d89c12d08382b66e2f21f20d0627d14859