[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1583825550-18606-1-git-send-email-komachi.yoshiki@gmail.com>
Date: Tue, 10 Mar 2020 16:32:28 +0900
From: Yoshiki Komachi <komachi.yoshiki@...il.com>
To: "David S. Miller" <davem@...emloft.net>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
Martin KaFai Lau <kafai@...com>,
Song Liu <songliubraving@...com>, Yonghong Song <yhs@...com>,
Andrii Nakryiko <andriin@...com>
Cc: Yoshiki Komachi <komachi.yoshiki@...il.com>,
netdev@...r.kernel.org, bpf@...r.kernel.org
Subject: [PATCH v2 bpf 0/2] Fix BTF verification of enum members with a selftest
btf_enum_check_member() checked if the size of "enum" as a struct
member exceeded struct_size or not. Then, the function compared it
with the size of "int". Although the size of "enum" is 4-byte by
default (i.e., equivalent to "int"), the packing feature enables
us to reduce it, as illustrated by the following example:
struct A {
char m;
enum { E0, E1 } __attribute__((packed)) n;
};
With such a setup above, the bpf loader gave an error attempting
to load it:
------------------------------------------------------------------
...
[3] ENUM (anon) size=1 vlen=2
E0 val=0
E1 val=1
[4] STRUCT A size=2 vlen=2
m type_id=2 bits_offset=0
n type_id=3 bits_offset=8
[4] STRUCT A size=2 vlen=2
n type_id=3 bits_offset=8 Member exceeds struct_size
libbpf: Error loading .BTF into kernel: -22.
------------------------------------------------------------------
The related issue was previously fixed by the commit 9eea98497951 ("bpf:
fix BTF verification of enums"). On the other hand, this series fixes
this issue as well, and adds a selftest program for it.
Changes in v2:
- change an example in commit message based on Andrii's review
- add a selftest program for packed "enum" type members in struct/union
Yoshiki Komachi (2):
bpf/btf: Fix BTF verification of enum members in struct/union
selftests/bpf: Add test for the packed enum member in struct/union
kernel/bpf/btf.c | 2 +-
tools/testing/selftests/bpf/test_btf.c | 42 ++++++++++++++++++++++++++++++++++
2 files changed, 43 insertions(+), 1 deletion(-)
--
1.8.3.1
Powered by blists - more mailing lists