Commit 5653f55e authored by Joanne Koong's avatar Joanne Koong Committed by Daniel Borkmann

selftests/bpf: Clean up sys_nanosleep uses

This patch cleans up a few things:

  * dynptr_fail.c:
    There is no sys_nanosleep tracepoint. dynptr_fail only tests
    that the prog load fails, so just SEC("?raw_tp") suffices here.

  * test_bpf_cookie:
    There is no sys_nanosleep kprobe. The prog is loaded in
    userspace through bpf_program__attach_kprobe_opts passing in
    SYS_NANOSLEEP_KPROBE_NAME, so just SEC("k{ret}probe") suffices here.

  * test_helper_restricted:
    There is no sys_nanosleep kprobe. test_helper_restricted only tests
    that the prog load fails, so just SEC("?kprobe")( suffices here.

There are no functional changes.
Suggested-by: default avatarAndrii Nakryiko <andrii@kernel.org>
Signed-off-by: default avatarJoanne Koong <joannelkoong@gmail.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarYonghong Song <yhs@fb.com>
Link: https://lore.kernel.org/bpf/20220805171405.2272103-1-joannelkoong@gmail.com
parent d25f40ff
...@@ -65,7 +65,7 @@ static int get_map_val_dynptr(struct bpf_dynptr *ptr) ...@@ -65,7 +65,7 @@ static int get_map_val_dynptr(struct bpf_dynptr *ptr)
/* Every bpf_ringbuf_reserve_dynptr call must have a corresponding /* Every bpf_ringbuf_reserve_dynptr call must have a corresponding
* bpf_ringbuf_submit/discard_dynptr call * bpf_ringbuf_submit/discard_dynptr call
*/ */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int ringbuf_missing_release1(void *ctx) int ringbuf_missing_release1(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -77,7 +77,7 @@ int ringbuf_missing_release1(void *ctx) ...@@ -77,7 +77,7 @@ int ringbuf_missing_release1(void *ctx)
return 0; return 0;
} }
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int ringbuf_missing_release2(void *ctx) int ringbuf_missing_release2(void *ctx)
{ {
struct bpf_dynptr ptr1, ptr2; struct bpf_dynptr ptr1, ptr2;
...@@ -112,7 +112,7 @@ static int missing_release_callback_fn(__u32 index, void *data) ...@@ -112,7 +112,7 @@ static int missing_release_callback_fn(__u32 index, void *data)
} }
/* Any dynptr initialized within a callback must have bpf_dynptr_put called */ /* Any dynptr initialized within a callback must have bpf_dynptr_put called */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int ringbuf_missing_release_callback(void *ctx) int ringbuf_missing_release_callback(void *ctx)
{ {
bpf_loop(10, missing_release_callback_fn, NULL, 0); bpf_loop(10, missing_release_callback_fn, NULL, 0);
...@@ -120,7 +120,7 @@ int ringbuf_missing_release_callback(void *ctx) ...@@ -120,7 +120,7 @@ int ringbuf_missing_release_callback(void *ctx)
} }
/* Can't call bpf_ringbuf_submit/discard_dynptr on a non-initialized dynptr */ /* Can't call bpf_ringbuf_submit/discard_dynptr on a non-initialized dynptr */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int ringbuf_release_uninit_dynptr(void *ctx) int ringbuf_release_uninit_dynptr(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -132,7 +132,7 @@ int ringbuf_release_uninit_dynptr(void *ctx) ...@@ -132,7 +132,7 @@ int ringbuf_release_uninit_dynptr(void *ctx)
} }
/* A dynptr can't be used after it has been invalidated */ /* A dynptr can't be used after it has been invalidated */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int use_after_invalid(void *ctx) int use_after_invalid(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -151,7 +151,7 @@ int use_after_invalid(void *ctx) ...@@ -151,7 +151,7 @@ int use_after_invalid(void *ctx)
} }
/* Can't call non-dynptr ringbuf APIs on a dynptr ringbuf sample */ /* Can't call non-dynptr ringbuf APIs on a dynptr ringbuf sample */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int ringbuf_invalid_api(void *ctx) int ringbuf_invalid_api(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -173,7 +173,7 @@ int ringbuf_invalid_api(void *ctx) ...@@ -173,7 +173,7 @@ int ringbuf_invalid_api(void *ctx)
} }
/* Can't add a dynptr to a map */ /* Can't add a dynptr to a map */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int add_dynptr_to_map1(void *ctx) int add_dynptr_to_map1(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -190,7 +190,7 @@ int add_dynptr_to_map1(void *ctx) ...@@ -190,7 +190,7 @@ int add_dynptr_to_map1(void *ctx)
} }
/* Can't add a struct with an embedded dynptr to a map */ /* Can't add a struct with an embedded dynptr to a map */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int add_dynptr_to_map2(void *ctx) int add_dynptr_to_map2(void *ctx)
{ {
struct test_info x; struct test_info x;
...@@ -207,7 +207,7 @@ int add_dynptr_to_map2(void *ctx) ...@@ -207,7 +207,7 @@ int add_dynptr_to_map2(void *ctx)
} }
/* A data slice can't be accessed out of bounds */ /* A data slice can't be accessed out of bounds */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int data_slice_out_of_bounds_ringbuf(void *ctx) int data_slice_out_of_bounds_ringbuf(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -227,7 +227,7 @@ int data_slice_out_of_bounds_ringbuf(void *ctx) ...@@ -227,7 +227,7 @@ int data_slice_out_of_bounds_ringbuf(void *ctx)
return 0; return 0;
} }
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int data_slice_out_of_bounds_map_value(void *ctx) int data_slice_out_of_bounds_map_value(void *ctx)
{ {
__u32 key = 0, map_val; __u32 key = 0, map_val;
...@@ -247,7 +247,7 @@ int data_slice_out_of_bounds_map_value(void *ctx) ...@@ -247,7 +247,7 @@ int data_slice_out_of_bounds_map_value(void *ctx)
} }
/* A data slice can't be used after it has been released */ /* A data slice can't be used after it has been released */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int data_slice_use_after_release(void *ctx) int data_slice_use_after_release(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -273,7 +273,7 @@ int data_slice_use_after_release(void *ctx) ...@@ -273,7 +273,7 @@ int data_slice_use_after_release(void *ctx)
} }
/* A data slice must be first checked for NULL */ /* A data slice must be first checked for NULL */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int data_slice_missing_null_check1(void *ctx) int data_slice_missing_null_check1(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -293,7 +293,7 @@ int data_slice_missing_null_check1(void *ctx) ...@@ -293,7 +293,7 @@ int data_slice_missing_null_check1(void *ctx)
} }
/* A data slice can't be dereferenced if it wasn't checked for null */ /* A data slice can't be dereferenced if it wasn't checked for null */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int data_slice_missing_null_check2(void *ctx) int data_slice_missing_null_check2(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -315,7 +315,7 @@ int data_slice_missing_null_check2(void *ctx) ...@@ -315,7 +315,7 @@ int data_slice_missing_null_check2(void *ctx)
/* Can't pass in a dynptr as an arg to a helper function that doesn't take in a /* Can't pass in a dynptr as an arg to a helper function that doesn't take in a
* dynptr argument * dynptr argument
*/ */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_helper1(void *ctx) int invalid_helper1(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -329,7 +329,7 @@ int invalid_helper1(void *ctx) ...@@ -329,7 +329,7 @@ int invalid_helper1(void *ctx)
} }
/* A dynptr can't be passed into a helper function at a non-zero offset */ /* A dynptr can't be passed into a helper function at a non-zero offset */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_helper2(void *ctx) int invalid_helper2(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -344,7 +344,7 @@ int invalid_helper2(void *ctx) ...@@ -344,7 +344,7 @@ int invalid_helper2(void *ctx)
} }
/* A bpf_dynptr is invalidated if it's been written into */ /* A bpf_dynptr is invalidated if it's been written into */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_write1(void *ctx) int invalid_write1(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -365,7 +365,7 @@ int invalid_write1(void *ctx) ...@@ -365,7 +365,7 @@ int invalid_write1(void *ctx)
* A bpf_dynptr can't be used as a dynptr if it has been written into at a fixed * A bpf_dynptr can't be used as a dynptr if it has been written into at a fixed
* offset * offset
*/ */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_write2(void *ctx) int invalid_write2(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -388,7 +388,7 @@ int invalid_write2(void *ctx) ...@@ -388,7 +388,7 @@ int invalid_write2(void *ctx)
* A bpf_dynptr can't be used as a dynptr if it has been written into at a * A bpf_dynptr can't be used as a dynptr if it has been written into at a
* non-const offset * non-const offset
*/ */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_write3(void *ctx) int invalid_write3(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -419,7 +419,7 @@ static int invalid_write4_callback(__u32 index, void *data) ...@@ -419,7 +419,7 @@ static int invalid_write4_callback(__u32 index, void *data)
/* If the dynptr is written into in a callback function, it should /* If the dynptr is written into in a callback function, it should
* be invalidated as a dynptr * be invalidated as a dynptr
*/ */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_write4(void *ctx) int invalid_write4(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -436,7 +436,7 @@ int invalid_write4(void *ctx) ...@@ -436,7 +436,7 @@ int invalid_write4(void *ctx)
/* A globally-defined bpf_dynptr can't be used (it must reside as a stack frame) */ /* A globally-defined bpf_dynptr can't be used (it must reside as a stack frame) */
struct bpf_dynptr global_dynptr; struct bpf_dynptr global_dynptr;
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int global(void *ctx) int global(void *ctx)
{ {
/* this should fail */ /* this should fail */
...@@ -448,7 +448,7 @@ int global(void *ctx) ...@@ -448,7 +448,7 @@ int global(void *ctx)
} }
/* A direct read should fail */ /* A direct read should fail */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_read1(void *ctx) int invalid_read1(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -464,7 +464,7 @@ int invalid_read1(void *ctx) ...@@ -464,7 +464,7 @@ int invalid_read1(void *ctx)
} }
/* A direct read at an offset should fail */ /* A direct read at an offset should fail */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_read2(void *ctx) int invalid_read2(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -479,7 +479,7 @@ int invalid_read2(void *ctx) ...@@ -479,7 +479,7 @@ int invalid_read2(void *ctx)
} }
/* A direct read at an offset into the lower stack slot should fail */ /* A direct read at an offset into the lower stack slot should fail */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_read3(void *ctx) int invalid_read3(void *ctx)
{ {
struct bpf_dynptr ptr1, ptr2; struct bpf_dynptr ptr1, ptr2;
...@@ -505,7 +505,7 @@ static int invalid_read4_callback(__u32 index, void *data) ...@@ -505,7 +505,7 @@ static int invalid_read4_callback(__u32 index, void *data)
} }
/* A direct read within a callback function should fail */ /* A direct read within a callback function should fail */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_read4(void *ctx) int invalid_read4(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -520,7 +520,7 @@ int invalid_read4(void *ctx) ...@@ -520,7 +520,7 @@ int invalid_read4(void *ctx)
} }
/* Initializing a dynptr on an offset should fail */ /* Initializing a dynptr on an offset should fail */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int invalid_offset(void *ctx) int invalid_offset(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -534,7 +534,7 @@ int invalid_offset(void *ctx) ...@@ -534,7 +534,7 @@ int invalid_offset(void *ctx)
} }
/* Can't release a dynptr twice */ /* Can't release a dynptr twice */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int release_twice(void *ctx) int release_twice(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -560,7 +560,7 @@ static int release_twice_callback_fn(__u32 index, void *data) ...@@ -560,7 +560,7 @@ static int release_twice_callback_fn(__u32 index, void *data)
/* Test that releasing a dynptr twice, where one of the releases happens /* Test that releasing a dynptr twice, where one of the releases happens
* within a calback function, fails * within a calback function, fails
*/ */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int release_twice_callback(void *ctx) int release_twice_callback(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
...@@ -575,7 +575,7 @@ int release_twice_callback(void *ctx) ...@@ -575,7 +575,7 @@ int release_twice_callback(void *ctx)
} }
/* Reject unsupported local mem types for dynptr_from_mem API */ /* Reject unsupported local mem types for dynptr_from_mem API */
SEC("?raw_tp/sys_nanosleep") SEC("?raw_tp")
int dynptr_from_mem_invalid_api(void *ctx) int dynptr_from_mem_invalid_api(void *ctx)
{ {
struct bpf_dynptr ptr; struct bpf_dynptr ptr;
......
...@@ -28,14 +28,14 @@ static void update(void *ctx, __u64 *res) ...@@ -28,14 +28,14 @@ static void update(void *ctx, __u64 *res)
*res |= bpf_get_attach_cookie(ctx); *res |= bpf_get_attach_cookie(ctx);
} }
SEC("kprobe/sys_nanosleep") SEC("kprobe")
int handle_kprobe(struct pt_regs *ctx) int handle_kprobe(struct pt_regs *ctx)
{ {
update(ctx, &kprobe_res); update(ctx, &kprobe_res);
return 0; return 0;
} }
SEC("kretprobe/sys_nanosleep") SEC("kretprobe")
int handle_kretprobe(struct pt_regs *ctx) int handle_kretprobe(struct pt_regs *ctx)
{ {
update(ctx, &kretprobe_res); update(ctx, &kretprobe_res);
......
...@@ -72,7 +72,7 @@ int tp_timer(void *ctx) ...@@ -72,7 +72,7 @@ int tp_timer(void *ctx)
return 0; return 0;
} }
SEC("?kprobe/sys_nanosleep") SEC("?kprobe")
int kprobe_timer(void *ctx) int kprobe_timer(void *ctx)
{ {
timer_work(); timer_work();
...@@ -104,7 +104,7 @@ int tp_spin_lock(void *ctx) ...@@ -104,7 +104,7 @@ int tp_spin_lock(void *ctx)
return 0; return 0;
} }
SEC("?kprobe/sys_nanosleep") SEC("?kprobe")
int kprobe_spin_lock(void *ctx) int kprobe_spin_lock(void *ctx)
{ {
spin_lock_work(); spin_lock_work();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment