bpf: Use bpf_load_program() from the library
Replace bpf_prog_load() with bpf_load_program() calls. Signed-off-by: Mickaël Salaün <mic@digikod.net> Cc: Alexei Starovoitov <ast@fb.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: Shuah Khan <shuah@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d02d8986a7
commit
2ee89fb9a9
|
@ -42,7 +42,7 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static __u64 ptr_to_u64(void *ptr)
|
static __u64 ptr_to_u64(const void *ptr)
|
||||||
{
|
{
|
||||||
return (__u64) (unsigned long) ptr;
|
return (__u64) (unsigned long) ptr;
|
||||||
}
|
}
|
||||||
|
@ -69,8 +69,8 @@ int bpf_create_map(enum bpf_map_type map_type, int key_size,
|
||||||
return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
|
return sys_bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
|
||||||
}
|
}
|
||||||
|
|
||||||
int bpf_load_program(enum bpf_prog_type type, struct bpf_insn *insns,
|
int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||||
size_t insns_cnt, char *license,
|
size_t insns_cnt, const char *license,
|
||||||
__u32 kern_version, char *log_buf, size_t log_buf_sz)
|
__u32 kern_version, char *log_buf, size_t log_buf_sz)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
|
|
|
@ -28,8 +28,8 @@ int bpf_create_map(enum bpf_map_type map_type, int key_size, int value_size,
|
||||||
|
|
||||||
/* Recommend log buffer size */
|
/* Recommend log buffer size */
|
||||||
#define BPF_LOG_BUF_SIZE 65536
|
#define BPF_LOG_BUF_SIZE 65536
|
||||||
int bpf_load_program(enum bpf_prog_type type, struct bpf_insn *insns,
|
int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
|
||||||
size_t insns_cnt, char *license,
|
size_t insns_cnt, const char *license,
|
||||||
__u32 kern_version, char *log_buf,
|
__u32 kern_version, char *log_buf,
|
||||||
size_t log_buf_sz);
|
size_t log_buf_sz);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
CFLAGS += -Wall -O2 -lcap -I../../../include/uapi
|
CFLAGS += -Wall -O2 -lcap -I../../../include/uapi -I../../../lib
|
||||||
|
|
||||||
test_objs = test_verifier test_tag test_maps test_lru_map test_lpm_map
|
test_objs = test_verifier test_tag test_maps test_lru_map test_lpm_map
|
||||||
|
|
||||||
|
@ -7,6 +7,8 @@ TEST_FILES := $(test_objs)
|
||||||
|
|
||||||
all: $(test_objs)
|
all: $(test_objs)
|
||||||
|
|
||||||
|
$(test_objs): ../../../lib/bpf/bpf.o
|
||||||
|
|
||||||
include ../lib.mk
|
include ../lib.mk
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
|
@ -84,25 +84,4 @@ static inline int bpf_map_create(enum bpf_map_type type, uint32_t size_key,
|
||||||
return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
|
return bpf(BPF_MAP_CREATE, &attr, sizeof(attr));
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int bpf_prog_load(enum bpf_prog_type type,
|
|
||||||
const struct bpf_insn *insns, size_t size_insns,
|
|
||||||
const char *license, char *log, size_t size_log)
|
|
||||||
{
|
|
||||||
union bpf_attr attr = {};
|
|
||||||
|
|
||||||
attr.prog_type = type;
|
|
||||||
attr.insns = bpf_ptr_to_u64(insns);
|
|
||||||
attr.insn_cnt = size_insns / sizeof(struct bpf_insn);
|
|
||||||
attr.license = bpf_ptr_to_u64(license);
|
|
||||||
|
|
||||||
if (size_log > 0) {
|
|
||||||
attr.log_buf = bpf_ptr_to_u64(log);
|
|
||||||
attr.log_size = size_log;
|
|
||||||
attr.log_level = 1;
|
|
||||||
log[0] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __BPF_SYS__ */
|
#endif /* __BPF_SYS__ */
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
#include <linux/bpf.h>
|
#include <linux/bpf.h>
|
||||||
#include <linux/if_alg.h>
|
#include <linux/if_alg.h>
|
||||||
|
|
||||||
|
#include <bpf/bpf.h>
|
||||||
|
|
||||||
#include "../../../include/linux/filter.h"
|
#include "../../../include/linux/filter.h"
|
||||||
|
|
||||||
#include "bpf_sys.h"
|
#include "bpf_sys.h"
|
||||||
|
@ -55,8 +57,8 @@ static int bpf_try_load_prog(int insns, int fd_map,
|
||||||
int fd_prog;
|
int fd_prog;
|
||||||
|
|
||||||
bpf_filler(insns, fd_map);
|
bpf_filler(insns, fd_map);
|
||||||
fd_prog = bpf_prog_load(BPF_PROG_TYPE_SCHED_CLS, prog, insns *
|
fd_prog = bpf_load_program(BPF_PROG_TYPE_SCHED_CLS, prog, insns, "", 0,
|
||||||
sizeof(struct bpf_insn), "", NULL, 0);
|
NULL, 0);
|
||||||
assert(fd_prog > 0);
|
assert(fd_prog > 0);
|
||||||
if (fd_map > 0)
|
if (fd_map > 0)
|
||||||
bpf_filler(insns, 0);
|
bpf_filler(insns, 0);
|
||||||
|
|
|
@ -24,6 +24,8 @@
|
||||||
#include <linux/bpf_perf_event.h>
|
#include <linux/bpf_perf_event.h>
|
||||||
#include <linux/bpf.h>
|
#include <linux/bpf.h>
|
||||||
|
|
||||||
|
#include <bpf/bpf.h>
|
||||||
|
|
||||||
#include "../../../include/linux/filter.h"
|
#include "../../../include/linux/filter.h"
|
||||||
|
|
||||||
#include "bpf_sys.h"
|
#include "bpf_sys.h"
|
||||||
|
@ -4535,9 +4537,9 @@ static void do_test_single(struct bpf_test *test, bool unpriv,
|
||||||
|
|
||||||
do_test_fixup(test, prog, &fd_f1, &fd_f2, &fd_f3);
|
do_test_fixup(test, prog, &fd_f1, &fd_f2, &fd_f3);
|
||||||
|
|
||||||
fd_prog = bpf_prog_load(prog_type ? : BPF_PROG_TYPE_SOCKET_FILTER,
|
fd_prog = bpf_load_program(prog_type ? : BPF_PROG_TYPE_SOCKET_FILTER,
|
||||||
prog, prog_len * sizeof(struct bpf_insn),
|
prog, prog_len, "GPL", 0, bpf_vlog,
|
||||||
"GPL", bpf_vlog, sizeof(bpf_vlog));
|
sizeof(bpf_vlog));
|
||||||
|
|
||||||
expected_ret = unpriv && test->result_unpriv != UNDEF ?
|
expected_ret = unpriv && test->result_unpriv != UNDEF ?
|
||||||
test->result_unpriv : test->result;
|
test->result_unpriv : test->result;
|
||||||
|
|
Loading…
Reference in New Issue