Re: [PATCH] KVM: PPC: Book3S HV: Skip kvmppc_uvmem_free if Ultravisor is not supported
On Thu, Mar 19, 2020 at 07:55:10PM -0300, Fabiano Rosas wrote: > kvmppc_uvmem_init checks for Ultravisor support and returns early if > it is not present. Calling kvmppc_uvmem_free at module exit will cause > an Oops: > > $ modprobe -r kvm-hv > > Oops: Kernel access of bad area, sig: 11 [#1] > > NIP: c0789e90 LR: c0789e8c CTR: c0401030 > REGS: c03fa7bab9a0 TRAP: 0300 Not tainted > (5.6.0-rc6-00033-g6c90b86a745a-dirty) > MSR: 90009033 CR: 24002282 XER: > > CFAR: c0dae880 DAR: 0008 DSISR: 4000 IRQMASK: 1 > GPR00: c0789e8c c03fa7babc30 c16fe500 > GPR04: 0006 c03faf205c00 > GPR08: 0001 802d c0080ddde140 > GPR12: c0401030 c03d9080 0001 > GPR16: 00013aad0074 00013aaac978 > GPR20: 00013aad0070 7fffd1b37158 > GPR24: 00014fef0d58 00014fef0cf0 0001 > GPR28: c18b2a60 > NIP [c0789e90] percpu_ref_kill_and_confirm+0x40/0x170 > LR [c0789e8c] percpu_ref_kill_and_confirm+0x3c/0x170 > Call Trace: > [c03fa7babc30] [c03faf2064d4] 0xc03faf2064d4 (unreliable) > [c03fa7babcb0] [c0400e8c] dev_pagemap_kill+0x6c/0x80 > [c03fa7babcd0] [c0401064] memunmap_pages+0x34/0x2f0 > [c03fa7babd50] [c0080548] kvmppc_uvmem_free+0x30/0x80 [kvm_hv] > [c03fa7babd80] [c0080ddcef18] kvmppc_book3s_exit_hv+0x20/0x78 > [kvm_hv] > [c03fa7babda0] [c02084d0] sys_delete_module+0x1d0/0x2c0 > [c03fa7babe20] [c000b9d0] system_call+0x5c/0x68 > Instruction dump: > 3fc2001b fb81ffe0 fba1ffe8 fbe1fff8 7c7f1b78 7c9c2378 3bde4560 7fc3f378 > f8010010 f821ff81 486249a1 6000 7c7d1b78 712a0002 40820084 > ---[ end trace 5774ef4dc2c98279 ]--- > > So this patch checks if kvmppc_uvmem_init actually allocated anything > before running kvmppc_uvmem_free. > > Fixes: ca9f4942670c ("KVM: PPC: Book3S HV: Support for running secure guests") > Reported-by: Greg Kurz > Signed-off-by: Fabiano Rosas Thanks, applied to my kvm-ppc-next branch (Michael Ellerman decided that he didn't need to take it as the crash only occurs with CONFIG_PPC_UV=n, which is not the default). Paul.
Re: [PATCH] KVM: PPC: Book3S HV: Skip kvmppc_uvmem_free if Ultravisor is not supported
On Thu, 19 Mar 2020 19:55:10 -0300 Fabiano Rosas wrote: > kvmppc_uvmem_init checks for Ultravisor support and returns early if > it is not present. Calling kvmppc_uvmem_free at module exit will cause > an Oops: > > $ modprobe -r kvm-hv > > Oops: Kernel access of bad area, sig: 11 [#1] > > NIP: c0789e90 LR: c0789e8c CTR: c0401030 > REGS: c03fa7bab9a0 TRAP: 0300 Not tainted > (5.6.0-rc6-00033-g6c90b86a745a-dirty) > MSR: 90009033 CR: 24002282 XER: > > CFAR: c0dae880 DAR: 0008 DSISR: 4000 IRQMASK: 1 > GPR00: c0789e8c c03fa7babc30 c16fe500 > GPR04: 0006 c03faf205c00 > GPR08: 0001 802d c0080ddde140 > GPR12: c0401030 c03d9080 0001 > GPR16: 00013aad0074 00013aaac978 > GPR20: 00013aad0070 7fffd1b37158 > GPR24: 00014fef0d58 00014fef0cf0 0001 > GPR28: c18b2a60 > NIP [c0789e90] percpu_ref_kill_and_confirm+0x40/0x170 > LR [c0789e8c] percpu_ref_kill_and_confirm+0x3c/0x170 > Call Trace: > [c03fa7babc30] [c03faf2064d4] 0xc03faf2064d4 (unreliable) > [c03fa7babcb0] [c0400e8c] dev_pagemap_kill+0x6c/0x80 > [c03fa7babcd0] [c0401064] memunmap_pages+0x34/0x2f0 > [c03fa7babd50] [c0080548] kvmppc_uvmem_free+0x30/0x80 [kvm_hv] > [c03fa7babd80] [c0080ddcef18] kvmppc_book3s_exit_hv+0x20/0x78 > [kvm_hv] > [c03fa7babda0] [c02084d0] sys_delete_module+0x1d0/0x2c0 > [c03fa7babe20] [c000b9d0] system_call+0x5c/0x68 > Instruction dump: > 3fc2001b fb81ffe0 fba1ffe8 fbe1fff8 7c7f1b78 7c9c2378 3bde4560 7fc3f378 > f8010010 f821ff81 486249a1 6000 7c7d1b78 712a0002 40820084 > ---[ end trace 5774ef4dc2c98279 ]--- > > So this patch checks if kvmppc_uvmem_init actually allocated anything > before running kvmppc_uvmem_free. > > Fixes: ca9f4942670c ("KVM: PPC: Book3S HV: Support for running secure guests") > Reported-by: Greg Kurz > Signed-off-by: Fabiano Rosas > --- Thanks for the quick fix :) Tested-by: Greg Kurz > arch/powerpc/kvm/book3s_hv_uvmem.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c > b/arch/powerpc/kvm/book3s_hv_uvmem.c > index 79b1202b1c62..9d26614b2a77 100644 > --- a/arch/powerpc/kvm/book3s_hv_uvmem.c > +++ b/arch/powerpc/kvm/book3s_hv_uvmem.c > @@ -806,6 +806,9 @@ int kvmppc_uvmem_init(void) > > void kvmppc_uvmem_free(void) > { > + if (!kvmppc_uvmem_bitmap) > + return; > + > memunmap_pages(_uvmem_pgmap); > release_mem_region(kvmppc_uvmem_pgmap.res.start, > resource_size(_uvmem_pgmap.res));
Re: [PATCH] KVM: PPC: Book3S HV: Skip kvmppc_uvmem_free if Ultravisor is not supported
On Thu, Mar 19, 2020 at 07:55:10PM -0300, Fabiano Rosas wrote: > kvmppc_uvmem_init checks for Ultravisor support and returns early if > it is not present. Calling kvmppc_uvmem_free at module exit will cause > an Oops: > > $ modprobe -r kvm-hv > > Oops: Kernel access of bad area, sig: 11 [#1] > > NIP: c0789e90 LR: c0789e8c CTR: c0401030 > REGS: c03fa7bab9a0 TRAP: 0300 Not tainted > (5.6.0-rc6-00033-g6c90b86a745a-dirty) > MSR: 90009033 CR: 24002282 XER: > > CFAR: c0dae880 DAR: 0008 DSISR: 4000 IRQMASK: 1 > GPR00: c0789e8c c03fa7babc30 c16fe500 > GPR04: 0006 c03faf205c00 > GPR08: 0001 802d c0080ddde140 > GPR12: c0401030 c03d9080 0001 > GPR16: 00013aad0074 00013aaac978 > GPR20: 00013aad0070 7fffd1b37158 > GPR24: 00014fef0d58 00014fef0cf0 0001 > GPR28: c18b2a60 > NIP [c0789e90] percpu_ref_kill_and_confirm+0x40/0x170 > LR [c0789e8c] percpu_ref_kill_and_confirm+0x3c/0x170 > Call Trace: > [c03fa7babc30] [c03faf2064d4] 0xc03faf2064d4 (unreliable) > [c03fa7babcb0] [c0400e8c] dev_pagemap_kill+0x6c/0x80 > [c03fa7babcd0] [c0401064] memunmap_pages+0x34/0x2f0 > [c03fa7babd50] [c0080548] kvmppc_uvmem_free+0x30/0x80 [kvm_hv] > [c03fa7babd80] [c0080ddcef18] kvmppc_book3s_exit_hv+0x20/0x78 > [kvm_hv] > [c03fa7babda0] [c02084d0] sys_delete_module+0x1d0/0x2c0 > [c03fa7babe20] [c000b9d0] system_call+0x5c/0x68 > Instruction dump: > 3fc2001b fb81ffe0 fba1ffe8 fbe1fff8 7c7f1b78 7c9c2378 3bde4560 7fc3f378 > f8010010 f821ff81 486249a1 6000 7c7d1b78 712a0002 40820084 > ---[ end trace 5774ef4dc2c98279 ]--- > > So this patch checks if kvmppc_uvmem_init actually allocated anything > before running kvmppc_uvmem_free. > > Fixes: ca9f4942670c ("KVM: PPC: Book3S HV: Support for running secure guests") > Reported-by: Greg Kurz > Signed-off-by: Fabiano Rosas Good catch! This should be Cc: sta...@vger.kernel.org # v5.5+ Acked-by: Paul Mackerras Paul.
[PATCH] KVM: PPC: Book3S HV: Skip kvmppc_uvmem_free if Ultravisor is not supported
kvmppc_uvmem_init checks for Ultravisor support and returns early if it is not present. Calling kvmppc_uvmem_free at module exit will cause an Oops: $ modprobe -r kvm-hv Oops: Kernel access of bad area, sig: 11 [#1] NIP: c0789e90 LR: c0789e8c CTR: c0401030 REGS: c03fa7bab9a0 TRAP: 0300 Not tainted (5.6.0-rc6-00033-g6c90b86a745a-dirty) MSR: 90009033 CR: 24002282 XER: CFAR: c0dae880 DAR: 0008 DSISR: 4000 IRQMASK: 1 GPR00: c0789e8c c03fa7babc30 c16fe500 GPR04: 0006 c03faf205c00 GPR08: 0001 802d c0080ddde140 GPR12: c0401030 c03d9080 0001 GPR16: 00013aad0074 00013aaac978 GPR20: 00013aad0070 7fffd1b37158 GPR24: 00014fef0d58 00014fef0cf0 0001 GPR28: c18b2a60 NIP [c0789e90] percpu_ref_kill_and_confirm+0x40/0x170 LR [c0789e8c] percpu_ref_kill_and_confirm+0x3c/0x170 Call Trace: [c03fa7babc30] [c03faf2064d4] 0xc03faf2064d4 (unreliable) [c03fa7babcb0] [c0400e8c] dev_pagemap_kill+0x6c/0x80 [c03fa7babcd0] [c0401064] memunmap_pages+0x34/0x2f0 [c03fa7babd50] [c0080548] kvmppc_uvmem_free+0x30/0x80 [kvm_hv] [c03fa7babd80] [c0080ddcef18] kvmppc_book3s_exit_hv+0x20/0x78 [kvm_hv] [c03fa7babda0] [c02084d0] sys_delete_module+0x1d0/0x2c0 [c03fa7babe20] [c000b9d0] system_call+0x5c/0x68 Instruction dump: 3fc2001b fb81ffe0 fba1ffe8 fbe1fff8 7c7f1b78 7c9c2378 3bde4560 7fc3f378 f8010010 f821ff81 486249a1 6000 7c7d1b78 712a0002 40820084 ---[ end trace 5774ef4dc2c98279 ]--- So this patch checks if kvmppc_uvmem_init actually allocated anything before running kvmppc_uvmem_free. Fixes: ca9f4942670c ("KVM: PPC: Book3S HV: Support for running secure guests") Reported-by: Greg Kurz Signed-off-by: Fabiano Rosas --- arch/powerpc/kvm/book3s_hv_uvmem.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c b/arch/powerpc/kvm/book3s_hv_uvmem.c index 79b1202b1c62..9d26614b2a77 100644 --- a/arch/powerpc/kvm/book3s_hv_uvmem.c +++ b/arch/powerpc/kvm/book3s_hv_uvmem.c @@ -806,6 +806,9 @@ int kvmppc_uvmem_init(void) void kvmppc_uvmem_free(void) { + if (!kvmppc_uvmem_bitmap) + return; + memunmap_pages(_uvmem_pgmap); release_mem_region(kvmppc_uvmem_pgmap.res.start, resource_size(_uvmem_pgmap.res)); -- 2.23.0