|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: dom0 PV looping on search_pre_exception_table()
On Thu, Dec 10, 2020 at 09:01:12PM +0000, Andrew Cooper wrote:
> I've repro'd the problem.
>
> When I modify Xen to explicitly demand-map the LDT in the MMUEXT_SET_LDT
> hypercall, everything works fine.
>
> Specifically, this delta:
>
> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
> index 723cc1070f..71a791d877 100644
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -3742,12 +3742,31 @@ long do_mmuext_op(
> else if ( (curr->arch.pv.ldt_ents != ents) ||
> (curr->arch.pv.ldt_base != ptr) )
> {
> + unsigned int err = 0, tmp;
> +
> if ( pv_destroy_ldt(curr) )
> flush_tlb_local();
>
> curr->arch.pv.ldt_base = ptr;
> curr->arch.pv.ldt_ents = ents;
> load_LDT(curr);
> +
> + printk("Probe new LDT\n");
> + asm volatile (
> + "mov %%es, %[tmp];\n\t"
> + "1: mov %[sel], %%es;\n\t"
> + "mov %[tmp], %%es;\n\t"
> + "2:\n\t"
> + ".section .fixup,\"ax\"\n"
> + "3: mov $1, %[err];\n\t"
> + "jmp 2b\n\t"
> + ".previous\n\t"
> + _ASM_EXTABLE(1b, 3b)
> + : [err] "+r" (err),
> + [tmp] "=&r" (tmp)
> + : [sel] "r" (0x3f)
> + : "memory");
> + printk(" => err %u\n", err);
> }
> break;
> }
>
> Which stashes %es, explicitly loads init's %ss selector to trigger the
> #PF and Xen's lazy mapping, then restores %es.
Yes, this works for dom0 too, I have it running multiuser
> [...]
>
> Presumably you've got no Meltdown mitigations going on within the NetBSD
> kernel? (I suspect not, seeing as changing Xen changes the behaviour,
> but it is worth asking).
No, there's no Meltdown mitigations for PV in NetBSD. as I see it,
for amd64 at last, the Xen kernel has to do it anyway, so it's not usefull
to implement it in the guest's kernel. Did I miss something ?
--
Manuel Bouyer <bouyer@xxxxxxxxxxxxxxx>
NetBSD: 26 ans d'experience feront toujours la difference
--
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |