Commit 2845989f2eba ("bpf: Validate node_id in arena_alloc_pages()")
added validation for invalid or offline NUMA node ids in
arena_alloc_pages(), but there is no selftest covering invalid node id
allocation failure.

Add a verifier_arena test that calls bpf_arena_alloc_pages() with an
invalid node id and checks that allocation fails.

Tested with:
  ./test_progs -t verifier_arena/alloc_pages_invalid_node

Signed-off-by: Woojin Ji <[email protected]>
---
 .../testing/selftests/bpf/progs/verifier_arena.c  | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/tools/testing/selftests/bpf/progs/verifier_arena.c 
b/tools/testing/selftests/bpf/progs/verifier_arena.c
index 62e282f4448a..91aa0941ded2 100644
--- a/tools/testing/selftests/bpf/progs/verifier_arena.c
+++ b/tools/testing/selftests/bpf/progs/verifier_arena.c
@@ -11,6 +11,7 @@
 #include "bpf_arena_common.h"
 
 #define private(name) SEC(".bss." #name) __hidden __attribute__((aligned(8)))
+#define INVALID_NODE_ID 0x7fffffff
 
 struct {
        __uint(type, BPF_MAP_TYPE_ARENA);
@@ -199,6 +200,20 @@ int basic_alloc3(void *ctx)
        return 0;
 }
 
+SEC("syscall")
+__success __retval(0)
+int alloc_pages_invalid_node(void *ctx)
+{
+#if defined(__BPF_FEATURE_ADDR_SPACE_CAST)
+       void __arena *page;
+
+       page = bpf_arena_alloc_pages(&arena, NULL, 1, INVALID_NODE_ID, 0);
+       if (page)
+               return 1;
+#endif
+       return 0;
+}
+
 SEC("socket")
 __success __retval(0)
 int basic_reserve1_nosleep(void *ctx)
-- 
2.54.0


Reply via email to