| From 07868fc6aaf57847b0f3a3d53086b7556eb83f4a Mon Sep 17 00:00:00 2001 |
| From: Igor Mammedov <imammedo@redhat.com> |
| Date: Mon, 10 Jun 2013 18:31:11 +0200 |
| Subject: x86: kvmclock: zero initialize pvclock shared memory area |
| |
| From: Igor Mammedov <imammedo@redhat.com> |
| |
| commit 07868fc6aaf57847b0f3a3d53086b7556eb83f4a upstream. |
| |
| kernel might hung in pvclock_clocksource_read() due to |
| uninitialized memory might contain odd version value in |
| following cycle: |
| |
| do { |
| version = __pvclock_read_cycles(src, &ret, &flags); |
| } while ((src->version & 1) || version != src->version); |
| |
| if secondary kvmclock is accessed before it's registered with kvm. |
| |
| Clear garbage in pvclock shared memory area right after it's |
| allocated to avoid this issue. |
| |
| Ref: https://bugzilla.kernel.org/show_bug.cgi?id=59521 |
| Signed-off-by: Igor Mammedov <imammedo@redhat.com> |
| [See BZ for analysis. We may want a different fix for 3.11, but |
| this is the safest for now - Paolo] |
| Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/x86/kernel/kvmclock.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/arch/x86/kernel/kvmclock.c |
| +++ b/arch/x86/kernel/kvmclock.c |
| @@ -238,6 +238,7 @@ void __init kvmclock_init(void) |
| if (!mem) |
| return; |
| hv_clock = __va(mem); |
| + memset(hv_clock, 0, size); |
| |
| if (kvm_register_clock("boot clock")) { |
| hv_clock = NULL; |