bpf: add selftest for stackmap with BPF_F_STACK_BUILD_ID
test_stacktrace_build_id() is added. It accesses tracepoint urandom_read with "dd" and "urandom_read" and gathers stack traces. Then it reads the stack traces from the stackmap. urandom_read is a statically link binary that reads from /dev/urandom. test_stacktrace_build_id() calls readelf to read build ID of urandom_read and compares it with build ID from the stackmap. Signed-off-by: Song Liu <songliubraving@fb.com> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:

committed by
Daniel Borkmann

parent
615755a77b
commit
81f77fd0de
@@ -231,6 +231,28 @@ enum bpf_attach_type {
|
||||
#define BPF_F_RDONLY (1U << 3)
|
||||
#define BPF_F_WRONLY (1U << 4)
|
||||
|
||||
/* Flag for stack_map, store build_id+offset instead of pointer */
|
||||
#define BPF_F_STACK_BUILD_ID (1U << 5)
|
||||
|
||||
enum bpf_stack_build_id_status {
|
||||
/* user space need an empty entry to identify end of a trace */
|
||||
BPF_STACK_BUILD_ID_EMPTY = 0,
|
||||
/* with valid build_id and offset */
|
||||
BPF_STACK_BUILD_ID_VALID = 1,
|
||||
/* couldn't get build_id, fallback to ip */
|
||||
BPF_STACK_BUILD_ID_IP = 2,
|
||||
};
|
||||
|
||||
#define BPF_BUILD_ID_SIZE 20
|
||||
struct bpf_stack_build_id {
|
||||
__s32 status;
|
||||
unsigned char build_id[BPF_BUILD_ID_SIZE];
|
||||
union {
|
||||
__u64 offset;
|
||||
__u64 ip;
|
||||
};
|
||||
};
|
||||
|
||||
union bpf_attr {
|
||||
struct { /* anonymous struct used by BPF_MAP_CREATE command */
|
||||
__u32 map_type; /* one of enum bpf_map_type */
|
||||
|
Reference in New Issue
Block a user