72 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <test_progs.h>3 4void test_obj_name(void)5{6 struct {7 const char *name;8 int success;9 int expected_errno;10 } tests[] = {11 { "", 1, 0 },12 { "_123456789ABCDE", 1, 0 },13 { "_123456789ABCDEF", 0, EINVAL },14 { "_123456789ABCD\n", 0, EINVAL },15 };16 struct bpf_insn prog[] = {17 BPF_ALU64_IMM(BPF_MOV, BPF_REG_0, 0),18 BPF_EXIT_INSN(),19 };20 __u32 duration = 0;21 int i;22 23 for (i = 0; i < ARRAY_SIZE(tests); i++) {24 size_t name_len = strlen(tests[i].name) + 1;25 union bpf_attr attr;26 size_t ncopy;27 int fd;28 29 /* test different attr.prog_name during BPF_PROG_LOAD */30 ncopy = name_len < sizeof(attr.prog_name) ?31 name_len : sizeof(attr.prog_name);32 bzero(&attr, sizeof(attr));33 attr.prog_type = BPF_PROG_TYPE_SCHED_CLS;34 attr.insn_cnt = 2;35 attr.insns = ptr_to_u64(prog);36 attr.license = ptr_to_u64("");37 memcpy(attr.prog_name, tests[i].name, ncopy);38 39 fd = syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));40 CHECK((tests[i].success && fd < 0) ||41 (!tests[i].success && fd >= 0) ||42 (!tests[i].success && errno != tests[i].expected_errno),43 "check-bpf-prog-name",44 "fd %d(%d) errno %d(%d)\n",45 fd, tests[i].success, errno, tests[i].expected_errno);46 47 if (fd >= 0)48 close(fd);49 50 /* test different attr.map_name during BPF_MAP_CREATE */51 ncopy = name_len < sizeof(attr.map_name) ?52 name_len : sizeof(attr.map_name);53 bzero(&attr, sizeof(attr));54 attr.map_type = BPF_MAP_TYPE_ARRAY;55 attr.key_size = 4;56 attr.value_size = 4;57 attr.max_entries = 1;58 attr.map_flags = 0;59 memcpy(attr.map_name, tests[i].name, ncopy);60 fd = syscall(__NR_bpf, BPF_MAP_CREATE, &attr, sizeof(attr));61 CHECK((tests[i].success && fd < 0) ||62 (!tests[i].success && fd >= 0) ||63 (!tests[i].success && errno != tests[i].expected_errno),64 "check-bpf-map-name",65 "fd %d(%d) errno %d(%d)\n",66 fd, tests[i].success, errno, tests[i].expected_errno);67 68 if (fd >= 0)69 close(fd);70 }71}72