]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
execmem: enforce allocation size aligment to PAGE_SIZE
authorMike Rapoport (Microsoft) <rppt@kernel.org>
Wed, 23 Apr 2025 14:48:07 +0000 (17:48 +0300)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 13 May 2025 06:50:33 +0000 (23:50 -0700)
Before introduction of ROX cache execmem allocation size was always
implicitly aligned to PAGE_SIZE inside vmalloc.

However, when allocation happens from the ROX cache, this is not
enforced.

Make sure that the allocation size is always consistently aligned to
PAGE_SIZE.

Mike said:

: Right now it'll make the maple trees in execmem_cache more compact.
: And it's a precaution for the case when execmem callers would want to
: change permissions on unaligned range because that would WARN_ON()
: loudly.

Peter said

: It should not have a runtime effect -- currently all this code is used
: with PAGE_SIZE multiples and everything just works.  But whilst I was
: perusing this code, I noticed that nothing actually enforced this.  If
: someone were to break this assumption things will go sideways.

Link: https://lkml.kernel.org/r/20250423144808.1619863-1-rppt@kernel.org
Fixes: 2e45474ab14f ("execmem: add support for cache of large ROX pages")
Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
Suggested-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/execmem.c

index e6c4f5076ca8d8cab5078089f859b30674af1856..2b683e7d864d83e32e93ba6c3ca873f85da0b43f 100644 (file)
@@ -377,6 +377,8 @@ void *execmem_alloc(enum execmem_type type, size_t size)
        pgprot_t pgprot = range->pgprot;
        void *p;
 
+       size = PAGE_ALIGN(size);
+
        if (use_cache)
                p = execmem_cache_alloc(range, size);
        else