Message ID | 20230502005218.3627530-2-drosen@google.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | BPF |
Headers | show |
Series | [v2,1/3] bpf: Allow NULL buffers in bpf_dynptr_slice(_rw) | expand |
On Mon, May 1, 2023 at 5:52 PM Daniel Rosenberg <drosen@google.com> wrote: > > bpf_dynptr_slice(_rw) no longer requires a buffer for verification. If the > buffer is needed, but not present, the function will return NULL. > > Signed-off-by: Daniel Rosenberg <drosen@google.com> > --- > tools/testing/selftests/bpf/prog_tests/dynptr.c | 1 + > .../selftests/bpf/progs/dynptr_success.c | 17 +++++++++++++++++ > 2 files changed, 18 insertions(+) > > diff --git a/tools/testing/selftests/bpf/prog_tests/dynptr.c b/tools/testing/selftests/bpf/prog_tests/dynptr.c > index d176c34a7d2e..ac1fcaddcddf 100644 > --- a/tools/testing/selftests/bpf/prog_tests/dynptr.c > +++ b/tools/testing/selftests/bpf/prog_tests/dynptr.c > @@ -20,6 +20,7 @@ static struct { > {"test_ringbuf", SETUP_SYSCALL_SLEEP}, > {"test_skb_readonly", SETUP_SKB_PROG}, > {"test_dynptr_skb_data", SETUP_SKB_PROG}, > + {"test_dynptr_skb_no_buff", SETUP_SKB_PROG}, > }; Please rebase and resubmit targeting bpf-next and with [PATCH bpf-next] subject. It doesn't apply: Using index info to reconstruct a base tree... M tools/testing/selftests/bpf/prog_tests/dynptr.c M tools/testing/selftests/bpf/progs/dynptr_success.c Falling back to patching base and 3-way merge... Auto-merging tools/testing/selftests/bpf/progs/dynptr_success.c CONFLICT (content): Merge conflict in tools/testing/selftests/bpf/progs/dynptr_success.c Auto-merging tools/testing/selftests/bpf/prog_tests/dynptr.c CONFLICT (content): Merge conflict in tools/testing/selftests/bpf/prog_tests/dynptr.c error: Failed to merge in the changes. Patch failed at 0002 selftests/bpf: Test allowing NULL buffer in dynptr slice
diff --git a/tools/testing/selftests/bpf/prog_tests/dynptr.c b/tools/testing/selftests/bpf/prog_tests/dynptr.c index d176c34a7d2e..ac1fcaddcddf 100644 --- a/tools/testing/selftests/bpf/prog_tests/dynptr.c +++ b/tools/testing/selftests/bpf/prog_tests/dynptr.c @@ -20,6 +20,7 @@ static struct { {"test_ringbuf", SETUP_SYSCALL_SLEEP}, {"test_skb_readonly", SETUP_SKB_PROG}, {"test_dynptr_skb_data", SETUP_SKB_PROG}, + {"test_dynptr_skb_no_buff", SETUP_SKB_PROG}, }; static void verify_success(const char *prog_name, enum test_setup_type setup_type) diff --git a/tools/testing/selftests/bpf/progs/dynptr_success.c b/tools/testing/selftests/bpf/progs/dynptr_success.c index b2fa6c47ecc0..16636a29242a 100644 --- a/tools/testing/selftests/bpf/progs/dynptr_success.c +++ b/tools/testing/selftests/bpf/progs/dynptr_success.c @@ -207,3 +207,20 @@ int test_dynptr_skb_data(struct __sk_buff *skb) return 1; } + +SEC("?cgroup_skb/egress") +int test_dynptr_skb_no_buff(struct __sk_buff *skb) +{ + struct bpf_dynptr ptr; + __u64 *data; + + if (bpf_dynptr_from_skb(skb, 0, &ptr)) { + err = 1; + return 1; + } + + /* This may return NULL. SKB may require a buffer */ + data = bpf_dynptr_slice(&ptr, 0, NULL, 1); + + return !!data; +}
bpf_dynptr_slice(_rw) no longer requires a buffer for verification. If the buffer is needed, but not present, the function will return NULL. Signed-off-by: Daniel Rosenberg <drosen@google.com> --- tools/testing/selftests/bpf/prog_tests/dynptr.c | 1 + .../selftests/bpf/progs/dynptr_success.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+)