diff mbox series

[1/2] bpf: support access variable length array of integer type

Message ID 20230417080749.39074-2-zhoufeng.zf@bytedance.com (mailing list archive)
State Accepted
Commit 2569c7b8726fc06d946a4f999fb1be15b68f3f3c
Headers show
Series Access variable length array relaxed for integer type | expand

Commit Message

Feng Zhou April 17, 2023, 8:07 a.m. UTC
From: Feng Zhou <zhoufeng.zf@bytedance.com>

After this commit:
bpf: Support variable length array in tracing programs (9c5f8a1008a1)
Trace programs can access variable length array, but for structure
type. This patch adds support for integer type.

Example:
Hook load_balance
struct sched_domain {
	...
	unsigned long span[];
}

The access: sd->span[0].

Co-developed-by: Chengming Zhou <zhouchengming@bytedance.com>
Signed-off-by: Chengming Zhou <zhouchengming@bytedance.com>
Signed-off-by: Feng Zhou <zhoufeng.zf@bytedance.com>
---
 kernel/bpf/btf.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

Comments

Alexei Starovoitov April 18, 2023, 12:08 a.m. UTC | #1
On Mon, Apr 17, 2023 at 04:07:48PM +0800, Feng zhou wrote:
> From: Feng Zhou <zhoufeng.zf@bytedance.com>
> 
> After this commit:
> bpf: Support variable length array in tracing programs (9c5f8a1008a1)
> Trace programs can access variable length array, but for structure
> type. This patch adds support for integer type.
> 
> Example:
> Hook load_balance
> struct sched_domain {
> 	...
> 	unsigned long span[];
> }
> 
> The access: sd->span[0].

The use case makes sense.
Please add it as a selftest. Either combine it with patch 2 or another patch 3.
and then resubmit.
Make sure to use [PATCH bpf-next] subject, so BPF CI knows how to test it.
Feng Zhou April 18, 2023, 2:53 a.m. UTC | #2
在 2023/4/18 08:08, Alexei Starovoitov 写道:
> On Mon, Apr 17, 2023 at 04:07:48PM +0800, Feng zhou wrote:
>> From: Feng Zhou <zhoufeng.zf@bytedance.com>
>>
>> After this commit:
>> bpf: Support variable length array in tracing programs (9c5f8a1008a1)
>> Trace programs can access variable length array, but for structure
>> type. This patch adds support for integer type.
>>
>> Example:
>> Hook load_balance
>> struct sched_domain {
>> 	...
>> 	unsigned long span[];
>> }
>>
>> The access: sd->span[0].
> The use case makes sense.
> Please add it as a selftest. Either combine it with patch 2 or another patch 3.
> and then resubmit.
> Make sure to use [PATCH bpf-next] subject, so BPF CI knows how to test it.

Will do, thanks.
diff mbox series

Patch

diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c
index 027f9f8a3551..a0887ee44e89 100644
--- a/kernel/bpf/btf.c
+++ b/kernel/bpf/btf.c
@@ -6157,11 +6157,13 @@  static int btf_struct_walk(struct bpf_verifier_log *log, const struct btf *btf,
 		if (off < moff)
 			goto error;
 
-		/* Only allow structure for now, can be relaxed for
-		 * other types later.
-		 */
+		/* allow structure and integer */
 		t = btf_type_skip_modifiers(btf, array_elem->type,
 					    NULL);
+
+		if (btf_type_is_int(t))
+			return WALK_SCALAR;
+
 		if (!btf_type_is_struct(t))
 			goto error;