Commit c2744ed2 authored by Sean Christopherson's avatar Sean Christopherson

KVM: Nullify async #PF worker's "apf" pointer as soon as it might be freed

Nullify the async #PF worker's local "apf" pointer immediately after the
point where the structure can be freed by the vCPU.  The existing comment
is helpful, but easy to overlook as there is no associated code.

Update the comment to clarify that it can be freed by as soon as the lock
is dropped, as "after this point" isn't strictly accurate, nor does it
help understand what prevents the structure from being freed earlier.
Reviewed-by: default avatarXu Yilun <yilun.xu@intel.com>
Reviewed-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
Link: https://lore.kernel.org/r/20240110011533.503302-5-seanjc@google.comSigned-off-by: default avatarSean Christopherson <seanjc@google.com>
parent 8284765f
...@@ -83,13 +83,14 @@ static void async_pf_execute(struct work_struct *work) ...@@ -83,13 +83,14 @@ static void async_pf_execute(struct work_struct *work)
apf->vcpu = NULL; apf->vcpu = NULL;
spin_unlock(&vcpu->async_pf.lock); spin_unlock(&vcpu->async_pf.lock);
if (!IS_ENABLED(CONFIG_KVM_ASYNC_PF_SYNC) && first)
kvm_arch_async_page_present_queued(vcpu);
/* /*
* apf may be freed by kvm_check_async_pf_completion() after * The apf struct may be freed by kvm_check_async_pf_completion() as
* this point * soon as the lock is dropped. Nullify it to prevent improper usage.
*/ */
apf = NULL;
if (!IS_ENABLED(CONFIG_KVM_ASYNC_PF_SYNC) && first)
kvm_arch_async_page_present_queued(vcpu);
trace_kvm_async_pf_completed(addr, cr2_or_gpa); trace_kvm_async_pf_completed(addr, cr2_or_gpa);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment