Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: - [Medium] The `vlen` for BTF_KIND_LOC_PROTO is incorrectly cast to `__u16`, causing implicit truncation for large vlen values. - [Medium] The `BTF_LOC_PARAM_SIGNED` flag is ignored when printing values for `BTF_KIND_LOC_PARAM`, causing negative signed values to be printed as unsigned. --
commit 979370a25e9a748392e761a4d7cd6d5cda14a0ed Author: Alan Maguire <[email protected]> bpftool: Add ability to dump LOC_PARAM, LOC_PROTO and LOCSEC This commit updates bpftool to support dumping the new BTF kinds BTF_KIND_LOC_PARAM, BTF_KIND_LOC_PROTO, and BTF_KIND_LOCSEC. It adds raw and JSON formatting support for these new types. > diff --git a/tools/bpf/bpftool/btf.c b/tools/bpf/bpftool/btf.c > index bca0a3982f09b..4d8991c99b484 100644 > --- a/tools/bpf/bpftool/btf.c > +++ b/tools/bpf/bpftool/btf.c [ ... ] > @@ -415,6 +418,88 @@ static int dump_btf_type(const struct btf *btf, __u32 id, [ ... ] > + case BTF_KIND_LOC_PARAM: { > + const struct btf_loc_param *p = btf_loc_param(t); > + __u32 *v = (__u32 *)(p + 1); > + __u32 i, vlen = btf_vlen(t); [ ... ] > + for (i = 0; i < vlen; i++, v++) { > + if (json_output) { > + jsonw_start_object(w); > + jsonw_uint_field(w, "value", *v); [Severity: Medium] Since the BTF_LOC_PARAM_SIGNED flag can be set in p->flags, will this jsonw_uint_field() unconditionally format negative signed values as large unsigned integers? > + jsonw_end_object(w); > + } else { > + printf("\n\t value=%u", *v); [Severity: Medium] Similarly for the plain-text output, does this ignore the BTF_LOC_PARAM_SIGNED flag and print signed negative values as large unsigned integers? > + } > + } > + if (json_output) > + jsonw_end_array(w); > + break; > + } > + case BTF_KIND_LOC_PROTO: { > + __u32 *params = btf_loc_proto_params(t); > + __u16 vlen = btf_vlen(t); [Severity: Medium] The vlen field in BTF types uses 24 bits. Does explicitly casting it to __u16 here silently drop the upper 8 bits? For a BTF_KIND_LOC_PROTO type with a vlen greater than 65535, this could truncate the output and display an incorrect number of parameters. -- Sashiko AI review ยท https://sashiko.dev/#/patchset/[email protected]?part=11
