KVM: s390: Free guest debug data on vcpu destroy
- 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.270, 5.15.221, 6.1.188, 6.6.157, 6.12.110, and 2 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
Summary
In the Linux kernel, the following vulnerability has been resolved: KVM: s390: Free guest debug data on vcpu destroy kvm_s390_clear_bp_data() is only called from kvm_arch_vcpu_ioctl_set_guest_debug(), i.e. when user space changes or disables debugging. A vCPU that is destroyed while hardware breakpoints are still armed - the normal case when the VMM just exits or crashes - leaks hw_bp_info, hw_wp_info and all old_data buffers, since generic KVM frees the vCPU right after kvm_arch_vcpu_destroy(). That is bounded by MAX_BP_COUNT entries, so roughly 8 KiB per vCPU, but it is unbounded over VM lifetimes. The allocations are GFP_KERNEL_ACCOUNT, so the charge also outlives the exiting process and pins dying memcgs. Fix by clearing the debug data on vCPU destruction. Calling it unconditionally is fine: struct kvm_vcpu is zero allocated, so for a vCPU that never enabled debugging the counters are 0 and the pointers NULL.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in 053f2068cf9b0654b651fed5ad7649d3deb982bf; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in 6c996b12bbe4a6023076e8eee3cfaf2cc99db76c; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in d6280fc540d8f4653c9b54a78cb747e128070f5e; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in 544a5a665019cef394ce8bda97fa7a2cab253781; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in 9a32c4c6a6c23b7f5bf765eb5b83ba7f64a8ec63; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in b5acacfdb8966abff91836c1c5bd7da59d8a526e; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in e4d8b7f176b976474e0800ba71ee2dfa3ce263c9; From 27291e2165b6de70c476b7b675308113edd69a60 · fixed in e7f698b09d4a7c36b299acf680fc50fe868e2bcd
- Linux Linux
3.16
- KernelLinux
From 3.16.0 · fixed in 5.10.270; From 5.11.0 · fixed in 5.15.221; From 5.16.0 · fixed in 6.1.188; From 6.2.0 · fixed in 6.6.157; From 6.7.0 · fixed in 6.12.110; From 6.13.0 · fixed in 6.18.51; From 6.19.0 · fixed in 7.2.5
References 8
git.kernel.org
- stable/c/053f2068cf9b0654b651fed5ad7649d3deb982bf
- stable/c/6c996b12bbe4a6023076e8eee3cfaf2cc99db76c
- stable/c/d6280fc540d8f4653c9b54a78cb747e128070f5e
- stable/c/544a5a665019cef394ce8bda97fa7a2cab253781
- stable/c/9a32c4c6a6c23b7f5bf765eb5b83ba7f64a8ec63
- stable/c/b5acacfdb8966abff91836c1c5bd7da59d8a526e
- stable/c/e4d8b7f176b976474e0800ba71ee2dfa3ce263c9
- stable/c/e7f698b09d4a7c36b299acf680fc50fe868e2bcd