Re: [PATCH] x86/execmem: fix ROX cache usage in Xen PV guests
From: Marek Marczykowski-Górecki
Date: Mon Jan 13 2025 - 15:10:23 EST
On Mon, Jan 13, 2025 at 06:55:52PM +0100, Borislav Petkov wrote:
> On Fri, Jan 10, 2025 at 12:02:38PM +0200, Mike Rapoport wrote:
> > On Fri, Jan 03, 2025 at 02:00:44PM +0100, Borislav Petkov wrote:
> > > Adding the author in Fixes to Cc
> >
> > Thanks, Boris!
> >
> > > On Fri, Jan 03, 2025 at 07:56:31AM +0100, Juergen Gross wrote:
> > > > The recently introduced ROX cache for modules is assuming large page
> > > > support in 64-bit mode without testing the related feature bit. This
> > > > results in breakage when running as a Xen PV guest, as in this mode
> > > > large pages are not supported.
> >
> > The ROX cache does not assume support for large pages, it just had a bug
> > when dealing with base pages and the patch below should fix it.
> >
> > Restricting ROX cache only for configurations that support large pages
> > makes sense on it's own because there's no real benefit from the cache on
> > such systems, but it does not fix the issue but rather covers it up.
> >
> > diff --git a/mm/execmem.c b/mm/execmem.c
> > index be6b234c032e..0090a6f422aa 100644
> > --- a/mm/execmem.c
> > +++ b/mm/execmem.c
> > @@ -266,6 +266,7 @@ static int execmem_cache_populate(struct execmem_range *range, size_t size)
> > unsigned long vm_flags = VM_ALLOW_HUGE_VMAP;
> > struct execmem_area *area;
> > unsigned long start, end;
> > + unsigned int page_shift;
> > struct vm_struct *vm;
> > size_t alloc_size;
> > int err = -ENOMEM;
> > @@ -296,8 +297,9 @@ static int execmem_cache_populate(struct execmem_range *range, size_t size)
> > if (err)
> > goto err_free_mem;
> >
> > + page_shift = get_vm_area_page_order(vm) + PAGE_SHIFT;
> > err = vmap_pages_range_noflush(start, end, range->pgprot, vm->pages,
> > - PMD_SHIFT);
> > + page_shift);
> > if (err)
> > goto err_free_mem;
> >
> > --
>
> So this patch is still being discussed here.
>
> akpm has already picked up the original fix from Jürgen:
>
> 59f59108475e ("x86/execmem: fix ROX cache usage in Xen PV guests")
>
> and the patch is already in Linus' tree.
>
> How much of a fiasco is this execmem thing going to become?
>
> Andrew, is there any chance we can synchronize on what you pick up for
> arch/x86/ or?
I was running some tests today with the above patch on top of -rc7
(and without Jürgen's one). Some tests are still running, and there are
still some crashes I need to take a look at (could be completely
unrelated), but generally it looks _much_ better, especially I don't see
the wall of crashes in HVM domU that I've seen before
(https://lore.kernel.org/xen-devel/Z3cyhdKu6M1vdBe_@mail-itl/).
The latter could be an effect of the above fix, or could be some other
fix that happened between -rc5 and -rc7. If that would be interesting,
I can also re-test with -rc5 + the above patch, or something else. Let
me know.
--
Best Regards,
Marek Marczykowski-Górecki
Invisible Things Lab
Attachment:
signature.asc
Description: PGP signature