FAILED: patch "[PATCH] KVM: x86: cleanup the page tracking SRCU instance" failed to apply to 4.9-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
2beb6dad2e8f95d710159d5befb390e4f62ab5cfMon Sep 17 00:00:00 2001
From: Paolo Bonzini <[email protected]>
Date: Mon, 27 Mar 2017 17:53:50 +0200
Subject: [PATCH] KVM: x86: cleanup the page tracking SRCU instance
SRCU uses a delayed work item. Skip cleaning it up, and the result is use-after-free in the work item callbacks.
arch/x86/include/asm/kvm_page_track.h +1 -0
@@ -46,6 +46,7 @@ struct kvm_page_track_notifier_node { };void kvm_page_track_init (struct kvm *kvm); +void kvm_page_track_cleanup (struct kvm *kvm);void kvm_page_track_free_memslot (struct kvm_memory_slot *free,struct kvm_memory_slot *dont);
arch/x86/kvm/page_track.c +8 -0
@@ -160,6 +160,14 @@ bool kvm_page_track_is_active(struct kvm_vcpu *vcpu, gfn_t gfn,return !!ACCESS_ONCE (slot->arch.gfn_track[mode][index]); } +void kvm_page_track_cleanup (struct kvm *kvm) +{ +struct kvm_page_track_notifier_head *head; + + head = &kvm->arch.track_notifier_head; +cleanup_srcu_struct (&head->track_srcu); +} +void kvm_page_track_init (struct kvm *kvm) {struct kvm_page_track_notifier_head *head;
arch/x86/kvm/x86.c +1 -0
@@ -8158,6 +8158,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm)kvm_free_vcpus (kvm);kvfree (rcu_dereference_check (kvm->arch.apic_map,1 ));kvm_mmu_uninit_vm (kvm); +kvm_page_track_cleanup (kvm); } void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,
Greg KH
maintainerQuoted 9 lines · On Thu, Mar 30, 2017 at 10:58:06AM +0200, [email protected] wrote:
The patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.thanks,
greg k-h
Sorry, wrong patch, this one works just fine, it's the other 4.9 kvm patch that breaks the build.
greg k-h
Quoted 60 lines
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
2beb6dad2e8f95d710159d5befb390e4f62ab5cfMon Sep 17 00:00:00 2001From: Paolo Bonzini <[email protected]>
Date: Mon, 27 Mar 2017 17:53:50 +0200
Subject: [PATCH] KVM: x86: cleanup the page tracking SRCU instanceSRCU uses a delayed work item. Skip cleaning it up, and the result is use-after-free in the work item callbacks.
Reported-by Dmitry Vyukov <[email protected]>Suggested-by Dmitry Vyukov <[email protected]>Fixes 0eb05bf290cfe8610d9680b49abef37febd1c38aReviewed-by Xiao Guangrong <[email protected]>Signed-off-by Paolo Bonzini <[email protected]>arch/x86/include/asm/kvm_page_track.h +1
-0@@ -46,6 +46,7 @@ struct kvm_page_track_notifier_node { };void kvm_page_track_init (struct kvm *kvm); +void kvm_page_track_cleanup (struct kvm *kvm);void kvm_page_track_free_memslot (struct kvm_memory_slot *free,struct kvm_memory_slot *dont);arch/x86/kvm/page_track.c +8
-0@@ -160,6 +160,14 @@ bool kvm_page_track_is_active(struct kvm_vcpu *vcpu, gfn_t gfn,return !!ACCESS_ONCE (slot->arch.gfn_track[mode][index]); } +void kvm_page_track_cleanup (struct kvm *kvm) +{ +struct kvm_page_track_notifier_head *head; + + head = &kvm->arch.track_notifier_head; +cleanup_srcu_struct (&head->track_srcu); +} +void kvm_page_track_init (struct kvm *kvm) {struct kvm_page_track_notifier_head *head;arch/x86/kvm/x86.c +1
-0@@ -8158,6 +8158,7 @@ void kvm_arch_destroy_vm(struct kvm *kvm)kvm_free_vcpus (kvm);kvfree (rcu_dereference_check (kvm->arch.apic_map,1 ));kvm_mmu_uninit_vm (kvm); +kvm_page_track_cleanup (kvm); } void kvm_arch_free_memslot(struct kvm *kvm, struct kvm_memory_slot *free,