]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm: correct type for vmalloc vm_flags fields
authorLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Tue, 29 Jul 2025 11:49:06 +0000 (12:49 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Sat, 2 Aug 2025 19:06:13 +0000 (12:06 -0700)
Several functions refer to the unfortunately named 'vm_flags' field when
referencing vmalloc flags, which happens to be the precise same name used
for VMA flags.

As a result these were erroneously changed to use the vm_flags_t type
(which currently is a typedef equivalent to unsigned long).

Currently this has no impact, but in future when vm_flags_t changes this
will result in issues, so change the type to unsigned long to account for
this.

[lorenzo.stoakes@oracle.com: fixup very disguised vmalloc flags parameter]
Link: https://lkml.kernel.org/r/e74dd8de-7e60-47ab-8a45-2c851f3c5d26@lucifer.local
Link: https://lkml.kernel.org/r/20250729114906.55347-1-lorenzo.stoakes@oracle.com
Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
Reported-by: Harry Yoo <harry.yoo@oracle.com>
Closes: https://lore.kernel.org/all/aIgSpAnU8EaIcqd9@hyeyoo/
Reviewed-by: Pedro Falcato <pfalcato@suse.de>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Cc: Jann Horn <jannh@google.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Michal Hocko <mhocko@suse.com>
Cc: Mike Rapoport <rppt@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: "Uladzislau Rezki (Sony)" <urezki@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
arch/arm64/mm/mmu.c
mm/execmem.c
mm/internal.h
mm/nommu.c

index 20a89ab97dc50082ba066bfc6e4453ca8c73a090..34e5d78af076d0e6d7ed1640a9cef997132d6a2a 100644 (file)
@@ -721,7 +721,7 @@ void mark_rodata_ro(void)
 
 static void __init declare_vma(struct vm_struct *vma,
                               void *va_start, void *va_end,
-                              vm_flags_t vm_flags)
+                              unsigned long vm_flags)
 {
        phys_addr_t pa_start = __pa_symbol(va_start);
        unsigned long size = va_end - va_start;
index 1785d7f435e44d7af3528dbedbf6f34aa0fc627a..0822305413ece14cfc64a994d9d969235feb58ab 100644 (file)
@@ -26,7 +26,7 @@ static struct execmem_info default_execmem_info __ro_after_init;
 
 #ifdef CONFIG_MMU
 static void *execmem_vmalloc(struct execmem_range *range, size_t size,
-                            pgprot_t pgprot, vm_flags_t vm_flags)
+                            pgprot_t pgprot, unsigned long vm_flags)
 {
        bool kasan = range->flags & EXECMEM_KASAN_SHADOW;
        gfp_t gfp_flags = GFP_KERNEL | __GFP_NOWARN;
@@ -82,7 +82,7 @@ struct vm_struct *execmem_vmap(size_t size)
 }
 #else
 static void *execmem_vmalloc(struct execmem_range *range, size_t size,
-                            pgprot_t pgprot, vm_flags_t vm_flags)
+                            pgprot_t pgprot, unsigned long vm_flags)
 {
        return vmalloc(size);
 }
@@ -283,7 +283,7 @@ out_unlock:
 
 static int execmem_cache_populate(struct execmem_range *range, size_t size)
 {
-       vm_flags_t vm_flags = VM_ALLOW_HUGE_VMAP;
+       unsigned long vm_flags = VM_ALLOW_HUGE_VMAP;
        struct vm_struct *vm;
        size_t alloc_size;
        int err = -ENOMEM;
@@ -465,7 +465,7 @@ void *execmem_alloc(enum execmem_type type, size_t size)
 {
        struct execmem_range *range = &execmem_info->ranges[type];
        bool use_cache = range->flags & EXECMEM_ROX_CACHE;
-       vm_flags_t vm_flags = VM_FLUSH_RESET_PERMS;
+       unsigned long vm_flags = VM_FLUSH_RESET_PERMS;
        pgprot_t pgprot = range->pgprot;
        void *p = NULL;
 
index 28d2d5b051df6cf4a438231525a00ccc8c194860..142d9302c2aed9161896b3c9314927be8a34d140 100644 (file)
@@ -1391,7 +1391,7 @@ int migrate_device_coherent_folio(struct folio *folio);
 
 struct vm_struct *__get_vm_area_node(unsigned long size,
                                     unsigned long align, unsigned long shift,
-                                    vm_flags_t vm_flags, unsigned long start,
+                                    unsigned long vm_flags, unsigned long start,
                                     unsigned long end, int node, gfp_t gfp_mask,
                                     const void *caller);
 
index 87e1acab0d64a1561292f23cb8b19e3b2d3e4c0f..07504d666d6a48c1c3cdeaeb72cb7d4b2f7f87c4 100644 (file)
@@ -126,7 +126,7 @@ void *vrealloc_noprof(const void *p, size_t size, gfp_t flags)
 
 void *__vmalloc_node_range_noprof(unsigned long size, unsigned long align,
                unsigned long start, unsigned long end, gfp_t gfp_mask,
-               pgprot_t prot, vm_flags_t vm_flags, int node,
+               pgprot_t prot, unsigned long vm_flags, int node,
                const void *caller)
 {
        return __vmalloc_noprof(size, gfp_mask);