On Tue, Mar 10, 2020 at 9:46 AM Martin KaFai Lau <kafai@xxxxxx> wrote: > > On Tue, Mar 10, 2020 at 04:32:28PM +0900, Yoshiki Komachi wrote: > > 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 > Acked-by: Martin KaFai Lau <kafai@xxxxxx> Applied to bpf tree. Thanks