High · published May 17, 2024
In the Linux kernel, the following vulnerability has been resolved:
KVM: SVM: Flush pages under kvm->lock to fix UAF in svm_register_enc_region()
Do the cache flush of converted pages in svm_register_enc_region() before
dropping kvm->lock to fix use-after-free issues where region and/or its
array of pages could be freed by a different task, e.g. if userspace has
__unregister_enc_region_locked() already queued up for the region.
Note, the "obvious" alternative of using local variables doesn't fully
resolve the bug, as region->pages is also dynamically allocated. I.e. the
region structure itself would be fine, but region->pages could be freed.
Flushing multiple pages under kvm->lock is unfortunate, but the entire
flow is a rare slow path, and the manual flush is only needed on CPUs that
lack coherency for encrypted memory.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 4.19.176, < 4.20 | 4.20 |
| linux/linux_kernel | ≥ 5.4.98, < 5.5 | 5.5 |
| linux/linux_kernel | ≥ 5.10.15, < 5.10.215 | 5.10.215 |
| linux/linux_kernel | ≥ 5.11.1, < 5.15.154 | 5.15.154 |
| linux/linux_kernel | ≥ 5.16, < 6.1.84 | 6.1.84 |
| linux/linux_kernel | ≥ 6.2, < 6.6.24 | 6.6.24 |
| linux/linux_kernel | ≥ 6.7, < 6.7.12 | 6.7.12 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| debian/debian_linux | all versions | — |