lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 6 Apr 2017 10:38:56 +0200 From: Greg Kroah-Hartman <gregkh@...uxfoundation.org> To: linux-kernel@...r.kernel.org Cc: Greg Kroah-Hartman <gregkh@...uxfoundation.org>, stable@...r.kernel.org, Alex Williamson <alex.williamson@...hat.com>, Jike Song <jike.song@...el.com>, Paolo Bonzini <pbonzini@...hat.com>, Zhenyu Wang <zhenyuw@...ux.intel.com>, Zhi Wang <zhi.a.wang@...el.com> Subject: [PATCH 4.10 64/81] drm/i915/kvmgt: Hold struct kvm reference 4.10-stable review patch. If anyone has any objections, please let me know. ------------------ From: Alex Williamson <alex.williamson@...hat.com> commit 93a15b58cfb8a24e666ffca432f19fe65c1cd7d1 upstream. The kvmgt code keeps a pointer to the struct kvm associated with the device, but doesn't actually hold a reference to it. If we do unclean shutdown testing (ie. killing the user process), then we can see the kvm association to the device unset, which causes kvmgt to trigger a device release via a work queue. Naturally we cannot guarantee that the cached struct kvm pointer is still valid at this point without holding a reference. The observed failure in this case is a stuck cpu trying to acquire the spinlock from the invalid reference, but other failure modes are clearly possible. Hold a reference to avoid this. Signed-off-by: Alex Williamson <alex.williamson@...hat.com> Cc: Jike Song <jike.song@...el.com> Cc: Paolo Bonzini <pbonzini@...hat.com> Cc: Zhenyu Wang <zhenyuw@...ux.intel.com> Cc: Zhi Wang <zhi.a.wang@...el.com> Reviewed-by: Jike Song <jike.song@...el.com> Signed-off-by: Zhenyu Wang <zhenyuw@...ux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@...uxfoundation.org> --- drivers/gpu/drm/i915/gvt/kvmgt.c | 2 ++ 1 file changed, 2 insertions(+) --- a/drivers/gpu/drm/i915/gvt/kvmgt.c +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c @@ -1334,6 +1334,7 @@ static int kvmgt_guest_init(struct mdev_ vgpu->handle = (unsigned long)info; info->vgpu = vgpu; info->kvm = kvm; + kvm_get_kvm(info->kvm); kvmgt_protect_table_init(info); gvt_cache_init(vgpu); @@ -1353,6 +1354,7 @@ static bool kvmgt_guest_exit(struct kvmg } kvm_page_track_unregister_notifier(info->kvm, &info->track_node); + kvm_put_kvm(info->kvm); kvmgt_protect_table_destroy(info); gvt_cache_destroy(info->vgpu); vfree(info);
Powered by blists - more mailing lists