mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 14:04:27 -04:00
selftests/bpf: Test kfunc argument diagnostics
Extend existing negative kfunc programs to assert that BTF void is rendered as void and that variable __szk arguments receive a structured constant-size diagnostic. Also pass a context pointer to bpf_refcount_acquire() and verify that the report describes the generic refcounted-object contract and the actual argument type. Retain the legacy verbose-message assertions. Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com> Acked-by: Eduard Zingerman <eddyz87@gmail.com> Link: https://lore.kernel.org/bpf/3eda33675965763aa9b2e6a5784f32b34a6a83988a55fbea98b0dbd0cf3b088d@mail.kernel.org Link: https://lore.kernel.org/bpf/20260816015746.2632990-8-memxor@gmail.com
This commit is contained in:
@@ -1590,6 +1590,7 @@ __u32 hdr_size = sizeof(struct ethhdr);
|
||||
/* Can't pass in variable-sized len to bpf_dynptr_slice */
|
||||
SEC("?tc")
|
||||
__failure __msg("must be a known constant")
|
||||
__msg("requires this memory size to be a verifier-known constant")
|
||||
int dynptr_slice_var_len1(struct __sk_buff *skb)
|
||||
{
|
||||
struct bpf_dynptr ptr;
|
||||
@@ -1609,6 +1610,7 @@ int dynptr_slice_var_len1(struct __sk_buff *skb)
|
||||
/* Can't pass in variable-sized len to bpf_dynptr_slice */
|
||||
SEC("?tc")
|
||||
__failure __msg("must be a known constant")
|
||||
__msg("requires this memory size to be a verifier-known constant")
|
||||
int dynptr_slice_var_len2(struct __sk_buff *skb)
|
||||
{
|
||||
char buffer[sizeof(struct ethhdr)] = {};
|
||||
|
||||
@@ -63,6 +63,7 @@ long rbtree_refcounted_node_ref_escapes(void *ctx)
|
||||
|
||||
SEC("?tc")
|
||||
__failure __msg("Possibly NULL pointer passed to trusted R1")
|
||||
__msg("requires a non-NULL value of type (void *)")
|
||||
long refcount_acquire_maybe_null(void *ctx)
|
||||
{
|
||||
struct node_acquire *n, *m;
|
||||
@@ -80,6 +81,14 @@ long refcount_acquire_maybe_null(void *ctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
SEC("?tc")
|
||||
__failure __msg("R1 is neither owning or non-owning ref")
|
||||
__msg("expects a pointer to a BPF-managed refcounted object, but R1 is a context pointer")
|
||||
long refcount_acquire_non_object(void *ctx)
|
||||
{
|
||||
return bpf_refcount_acquire(ctx) != NULL;
|
||||
}
|
||||
|
||||
SEC("?tc")
|
||||
__failure __msg("Unreleased reference id=3 alloc_insn={{[0-9]+}}")
|
||||
long rbtree_refcounted_node_ref_escapes_owning_input(void *ctx)
|
||||
|
||||
Reference in New Issue
Block a user