From: Jiri Olsa <olsajiri@gmail.com>
To: Alan Maguire <alan.maguire@oracle.com>
Cc: acme@kernel.org, ast@kernel.org, andrii@kernel.org,
daniel@iogearbox.net, quentin@isovalent.com,
martin.lau@linux.dev, song@kernel.org, yhs@fb.com,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@google.com,
haoluo@google.com, mykolal@fb.com, bpf@vger.kernel.org
Subject: Re: [PATCH v2 bpf-next 4/9] btf: support kernel parsing of BTF with kind layout
Date: Sun, 18 Jun 2023 15:08:02 +0200 [thread overview]
Message-ID: <ZI8BsoyLkCPLaRG3@krava> (raw)
In-Reply-To: <20230616171728.530116-5-alan.maguire@oracle.com>
On Fri, Jun 16, 2023 at 06:17:22PM +0100, Alan Maguire wrote:
SNIP
> static int btf_sec_info_cmp(const void *a, const void *b)
> @@ -5193,32 +5246,37 @@ static int btf_check_sec_info(struct btf_verifier_env *env,
> u32 btf_data_size)
> {
> struct btf_sec_info secs[ARRAY_SIZE(btf_sec_info_offset)];
> - u32 total, expected_total, i;
> + u32 nr_secs = ARRAY_SIZE(btf_sec_info_offset);
> + u32 total, expected_total, gap, i;
> const struct btf_header *hdr;
> const struct btf *btf;
>
> btf = env->btf;
> hdr = &btf->hdr;
>
> + if (hdr->hdr_len < sizeof(struct btf_header))
> + nr_secs--;
> +
> /* Populate the secs from hdr */
> - for (i = 0; i < ARRAY_SIZE(btf_sec_info_offset); i++)
> + for (i = 0; i < nr_secs; i++)
> secs[i] = *(struct btf_sec_info *)((void *)hdr +
> btf_sec_info_offset[i]);
>
> - sort(secs, ARRAY_SIZE(btf_sec_info_offset),
> + sort(secs, nr_secs,
> sizeof(struct btf_sec_info), btf_sec_info_cmp, NULL);
>
> /* Check for gaps and overlap among sections */
> total = 0;
> expected_total = btf_data_size - hdr->hdr_len;
> - for (i = 0; i < ARRAY_SIZE(btf_sec_info_offset); i++) {
> + for (i = 0; i < nr_secs; i++) {
> if (expected_total < secs[i].off) {
> btf_verifier_log(env, "Invalid section offset");
> return -EINVAL;
> }
> - if (total < secs[i].off) {
> - /* gap */
> - btf_verifier_log(env, "Unsupported section found");
> + gap = secs[i].off - total;
> + if (gap >= 4) {
> + /* gap larger than alignment gap */
> + btf_verifier_log(env, "Unsupported section gap found");
> return -EINVAL;
this sems to break several btf header tests with:
do_test_raw:PASS:check 0 nsec
do_test_raw:FAIL:check expected err_str:Unsupported section found
magic: 0xeb9f
version: 1
flags: 0x0
hdr_len: 40
type_off: 4
type_len: 16
str_off: 16
str_len: 5
btf_total_size: 61
Unsupported section gap found
#23/48 btf/btf_header test. Gap between hdr and type:FAIL
jirka
> }
> if (total > secs[i].off) {
> @@ -5230,7 +5288,7 @@ static int btf_check_sec_info(struct btf_verifier_env *env,
> "Total section length too long");
> return -EINVAL;
> }
> - total += secs[i].len;
> + total += secs[i].len + gap;
> }
>
> /* There is data other than hdr and known sections */
> @@ -5293,7 +5351,7 @@ static int btf_parse_hdr(struct btf_verifier_env *env)
> return -ENOTSUPP;
> }
>
> - if (hdr->flags) {
> + if (hdr->flags & ~(BTF_FLAG_CRC_SET | BTF_FLAG_BASE_CRC_SET)) {
> btf_verifier_log(env, "Unsupported flags");
> return -ENOTSUPP;
> }
> @@ -5530,6 +5588,10 @@ static struct btf *btf_parse(const union bpf_attr *attr, bpfptr_t uattr, u32 uat
> if (err)
> goto errout;
>
> + err = btf_parse_kind_layout_sec(env);
> + if (err)
> + goto errout;
> +
> err = btf_parse_type_sec(env);
> if (err)
> goto errout;
> --
> 2.39.3
>
next prev parent reply other threads:[~2023-06-18 13:08 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-16 17:17 [PATCH v2 bpf-next 0/9] bpf: support BTF kind layout info, CRCs Alan Maguire
2023-06-16 17:17 ` [PATCH v2 bpf-next 1/9] btf: add kind layout encoding, crcs to UAPI Alan Maguire
2023-06-17 0:39 ` Alexei Starovoitov
2023-06-22 22:02 ` Andrii Nakryiko
2023-07-03 13:42 ` Alan Maguire
2023-07-05 23:48 ` Andrii Nakryiko
2023-07-20 20:18 ` Alan Maguire
2023-06-16 17:17 ` [PATCH v2 bpf-next 2/9] libbpf: support handling of kind layout section in BTF Alan Maguire
2023-06-22 22:02 ` Andrii Nakryiko
2023-06-16 17:17 ` [PATCH v2 bpf-next 3/9] libbpf: use kind layout to compute an unknown kind size Alan Maguire
2023-06-22 22:03 ` Andrii Nakryiko
2023-06-16 17:17 ` [PATCH v2 bpf-next 4/9] btf: support kernel parsing of BTF with kind layout Alan Maguire
2023-06-18 13:08 ` Jiri Olsa [this message]
2023-06-20 8:40 ` Alan Maguire
2023-06-22 22:03 ` Andrii Nakryiko
2023-06-16 17:17 ` [PATCH v2 bpf-next 5/9] libbpf: add kind layout encoding, crc support Alan Maguire
2023-06-19 23:24 ` Yonghong Song
2023-06-20 9:09 ` Alan Maguire
2023-06-20 14:41 ` Yonghong Song
2023-06-22 22:04 ` Andrii Nakryiko
2023-06-16 17:17 ` [PATCH v2 bpf-next 6/9] btf: generate BTF kind layout for vmlinux/module BTF Alan Maguire
2023-06-16 18:53 ` kernel test robot
2023-06-18 13:07 ` Jiri Olsa
2023-06-20 8:46 ` Alan Maguire
2023-06-16 17:17 ` [PATCH v2 bpf-next 7/9] bpftool: add BTF dump "format meta" to dump header/metadata Alan Maguire
2023-06-22 22:04 ` Andrii Nakryiko
2023-06-29 14:16 ` Quentin Monnet
2023-06-16 17:17 ` [PATCH v2 bpf-next 8/9] bpftool: update doc to describe bpftool btf dump .. format meta Alan Maguire
2023-06-29 14:16 ` Quentin Monnet
2023-06-16 17:17 ` [PATCH v2 bpf-next 9/9] selftests/bpf: test kind encoding/decoding Alan Maguire
2023-06-22 23:48 ` Andrii Nakryiko
2023-06-16 17:17 ` [PATCH dwarves] dwarves: encode BTF kind layout, crcs Alan Maguire
2023-06-17 0:39 ` [PATCH v2 bpf-next 0/9] bpf: support BTF kind layout info, CRCs Alexei Starovoitov
2023-06-20 8:41 ` Alan Maguire
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZI8BsoyLkCPLaRG3@krava \
--to=olsajiri@gmail.com \
--cc=acme@kernel.org \
--cc=alan.maguire@oracle.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=haoluo@google.com \
--cc=john.fastabend@gmail.com \
--cc=kpsingh@kernel.org \
--cc=martin.lau@linux.dev \
--cc=mykolal@fb.com \
--cc=quentin@isovalent.com \
--cc=sdf@google.com \
--cc=song@kernel.org \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.