]> Gentwo Git Trees - linux/.git/commit
KVM: x86: Use kvfree_rcu() to free old optimized APIC map
authorLi RongQing <lirongqing@baidu.com>
Wed, 22 Jan 2025 07:34:56 +0000 (15:34 +0800)
committerSean Christopherson <seanjc@google.com>
Wed, 12 Feb 2025 18:16:26 +0000 (10:16 -0800)
commit82c470121c7ba970ad866a08a78eae067b523993
tree2994fda8cd2e9020b935e49df0ed6d36eec705a5
parent4cad9f87876a943d018ad73ec3919215fb756d2d
KVM: x86: Use kvfree_rcu() to free old optimized APIC map

Use kvfree_rcu() to free the old optimized APIC instead of open coding a
rough equivalent via call_rcu() and a callback function.

Note, there is a subtle function change as rcu_barrier() doesn't wait on
kvfree_rcu(), but does wait on call_rcu().  Not forcing rcu_barrier() to
wait is safe and desirable in this case, as KVM doesn't care when an old
map is actually freed.  In fact, using kvfree_rcu() fixes a largely
theoretical use-after-free.  Because KVM _doesn't_ do rcu_barrier() to
wait for kvm_apic_map_free() to complete, if KVM-the-module is unloaded in
the RCU grace period before kvm_apic_map_free() is invoked, KVM's callback
could run after module unload.

Signed-off-by: Li RongQing <lirongqing@baidu.com>
Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
Link: https://lore.kernel.org/r/20250122073456.2950-1-lirongqing@baidu.com
[sean: rework changelog, call out rcu_barrier() interaction]
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/lapic.c