On 11/23/19 9:56 PM, Andrii Nakryiko wrote:
mmap() support for BPF array depends on vmalloc_user_node_flags, which is available only on CONFIG_MMU configurations. Fail mmap-able allocations if no CONFIG_MMU is set. Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Reported-by: kbuild test robot <lkp@xxxxxxxxx> Signed-off-by: Andrii Nakryiko <andriin@xxxxxx> --- kernel/bpf/syscall.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index bb002f15b32a..242a06fbdf18 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -156,8 +156,12 @@ static void *__bpf_map_area_alloc(u64 size, int numa_node, bool mmapable) } if (mmapable) { BUG_ON(!PAGE_ALIGNED(size)); +#ifndef CONFIG_MMU + return NULL; +#else return vmalloc_user_node_flags(size, numa_node, GFP_KERNEL | __GFP_RETRY_MAYFAIL | flags);
Hmm, this should rather live in include/linux/vmalloc.h, otherwise every future user of vmalloc_user_node_flags() would need to add this ifdef? vmalloc.h has the below, so perhaps this could be added there instead: [..] #ifndef CONFIG_MMU extern void *__vmalloc_node_flags(unsigned long size, int node, gfp_t flags); static inline void *__vmalloc_node_flags_caller(unsigned long size, int node, gfp_t flags, void *caller) { return __vmalloc_node_flags(size, node, flags); } #else extern void *__vmalloc_node_flags_caller(unsigned long size, int node, gfp_t flags, void *caller); #endif [..]
+#endif } return __vmalloc_node_flags_caller(size, numa_node, GFP_KERNEL | __GFP_RETRY_MAYFAIL |