[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <DC33E827-1A58-4AFF-A91B-138FBC8728A6@fb.com>
Date: Tue, 3 Nov 2020 00:51:36 +0000
From: Song Liu <songliubraving@...com>
To: Andrii Nakryiko <andrii@...nel.org>
CC: bpf <bpf@...r.kernel.org>, Networking <netdev@...r.kernel.org>,
"Alexei Starovoitov" <ast@...com>,
Daniel Borkmann <daniel@...earbox.net>,
Kernel Team <Kernel-team@...com>
Subject: Re: [PATCH bpf-next 07/11] libbpf: fix BTF data layout checks and
allow empty BTF
> On Oct 28, 2020, at 5:58 PM, Andrii Nakryiko <andrii@...nel.org> wrote:
>
> Make data section layout checks stricter, disallowing overlap of types and
> strings data.
>
> Additionally, allow BTFs with no type data. There is nothing inherently wrong
> with having BTF with no types (put potentially with some strings). This could
> be a situation with kernel module BTFs, if module doesn't introduce any new
> type information.
>
> Also fix invalid offset alignment check for btf->hdr->type_off.
>
> Fixes: 8a138aed4a80 ("bpf: btf: Add BTF support to libbpf")
> Signed-off-by: Andrii Nakryiko <andrii@...nel.org>
> ---
> tools/lib/bpf/btf.c | 16 ++++++----------
> 1 file changed, 6 insertions(+), 10 deletions(-)
>
> diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c
> index 20c64a8441a8..9b0ef71a03d0 100644
> --- a/tools/lib/bpf/btf.c
> +++ b/tools/lib/bpf/btf.c
> @@ -245,22 +245,18 @@ static int btf_parse_hdr(struct btf *btf)
> return -EINVAL;
> }
>
> - if (meta_left < hdr->type_off) {
> - pr_debug("Invalid BTF type section offset:%u\n", hdr->type_off);
> + if (meta_left < hdr->str_off + hdr->str_len) {
> + pr_debug("Invalid BTF total size:%u\n", btf->raw_size);
> return -EINVAL;
> }
Can we make this one as
if (meta_left != hdr->str_off + hdr->str_len) {
>
> - if (meta_left < hdr->str_off) {
> - pr_debug("Invalid BTF string section offset:%u\n", hdr->str_off);
> + if (hdr->type_off + hdr->type_len > hdr->str_off) {
> + pr_debug("Invalid BTF data sections layout: type data at %u + %u, strings data at %u + %u\n",
> + hdr->type_off, hdr->type_len, hdr->str_off, hdr->str_len);
> return -EINVAL;
> }
And this one
if (hdr->type_off + hdr->type_len != hdr->str_off) {
?
[...]
Powered by blists - more mailing lists