KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated

Platform

linux

Component

linux

Fixed in

ba3bca40f9f25c053f69413e5f4a41dd0fd762bf

In the Linux kernel, the following vulnerability has been resolved:

KVM: SVM: Set/clear CR8 write interception when AVIC is (de)activated

Explicitly set/clear CR8 write interception when AVIC is (de)activated to fix a bug where KVM leaves the interception enabled after AVIC is activated. E.g. if KVM emulates INIT=>WFS while AVIC is deactivated, CR8 will remain intercepted in perpetuity.

On its own, the dangling CR8 intercept is "just" a performance issue, but combined with the TPR sync bug fixed by commit d02e48830e3f ("KVM: SVM: Sync TPR from LAPIC into VMCB::V_TPR even if AVIC is active"), the danging intercept is fatal to Windows guests as the TPR seen by hardware gets wildly out of sync with reality.

Note, VMX isn't affected by the bug as TPR_THRESHOLD is explicitly ignored when Virtual Interrupt Delivery is enabled, i.e. when APICv is active in KVM's world. I.e. there's no need to trigger updatecr8intercept(), this is firmly an SVM implementation flaw/detail.

WARN if KVM gets a CR8 write #VMEXIT while AVIC is active, as KVM should never enter the guest with AVIC enabled and CR8 writes intercepted.

[Squash fix to avicdeactivatevmcb. - Paolo]

Affected Software

Componentlinux
VendorLinux
Maximum versionba3bca40f9f25c053f69413e5f4a41dd0fd762bf
Fixed inba3bca40f9f25c053f69413e5f4a41dd0fd762bf

Timeline

  1. Reserved
  2. Published

How to fix

Actualizar el kernel de Linux a la versión 6.6.1 o posterior para corregir la vulnerabilidad. Esta actualización aborda un problema donde la interceptación de escritura de CR8 no se restablecía correctamente después de la desactivación de AVIC, lo que podía provocar problemas de rendimiento y, en combinación con otros errores, ser fatal para los invitados de Windows.

Is your project affected?

Upload your dependency file and we'll tell you instantly if this and other CVEs hit you.

livefree scan

Try it now — no account

Upload any manifest (composer.lock, package-lock.json, WordPress plugin list…) or paste your component list. You get a vulnerability report instantly. Uploading a file is just the start: with an account you get continuous monitoring, Slack/email alerts, multi-project and white-label reports.

Manual scanSlack/email alertsContinuous monitoringWhite-label reports

Drag & drop your dependency file

composer.lock, package-lock.json, requirements.txt, Gemfile.lock, pubspec.lock, Dockerfile...