Daniel Borkmann
36f9814a49
bpf: fix uapi hole for 32 bit compat applications
...
In 64 bit, we have a 4 byte hole between ifindex and netns_dev in the
case of struct bpf_map_info but also struct bpf_prog_info. In net-next
commit b85fab0e67b ("bpf: Add gpl_compatible flag to struct bpf_prog_info")
added a bitfield into it to expose some flags related to programs. Thus,
add an unnamed __u32 bitfield for both so that alignment keeps the same
in both 32 and 64 bit cases, and can be naturally extended from there
as in b85fab0e67b.
Before:
# file test.o
test.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
# pahole test.o
struct bpf_map_info {
__u32 type; /* 0 4 */
__u32 id; /* 4 4 */
__u32 key_size; /* 8 4 */
__u32 value_size; /* 12 4 */
__u32 max_entries; /* 16 4 */
__u32 map_flags; /* 20 4 */
char name[16]; /* 24 16 */
__u32 ifindex; /* 40 4 */
__u64 netns_dev; /* 44 8 */
__u64 netns_ino; /* 52 8 */
/* size: 64, cachelines: 1, members: 10 */
/* padding: 4 */
};
After (same as on 64 bit):
# file test.o
test.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
# pahole test.o
struct bpf_map_info {
__u32 type; /* 0 4 */
__u32 id; /* 4 4 */
__u32 key_size; /* 8 4 */
__u32 value_size; /* 12 4 */
__u32 max_entries; /* 16 4 */
__u32 map_flags; /* 20 4 */
char name[16]; /* 24 16 */
__u32 ifindex; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
__u64 netns_dev; /* 48 8 */
__u64 netns_ino; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
/* size: 64, cachelines: 1, members: 10 */
/* sum members: 60, holes: 1, sum holes: 4 */
};
Reported-by: Dmitry V. Levin <ldv@altlinux.org>
Reported-by: Eugene Syromiatnikov <esyr@redhat.com>
Fixes: 52775b33bb507 ("bpf: offload: report device information about offloaded maps")
Fixes: 675fc275a3a2d ("bpf: offload: report device information for offloaded programs")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-06-01 20:41:35 -07:00
..
2017-11-02 11:10:55 +01:00
2018-05-07 15:23:46 -03:00
2018-04-26 22:23:02 +02:00
2018-04-11 00:03:02 +09:00
2018-02-21 15:35:42 -08:00
2017-11-02 11:10:55 +01:00
2018-03-18 17:48:59 +01:00
2018-03-06 09:57:16 -08:00
2018-02-21 15:35:42 -08:00
2018-06-01 20:41:35 -07:00
2018-03-28 22:47:06 +02:00
2018-02-21 15:35:42 -08:00
2018-02-21 15:35:42 -08:00
2018-05-11 00:20:53 +02:00
2018-03-10 10:22:23 +01:00
2017-11-02 11:10:55 +01:00
2018-05-19 08:10:04 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-05-11 12:10:02 -03:00
2018-05-04 11:24:22 +02:00
2018-04-11 00:03:02 +09:00
2018-02-21 15:35:42 -08:00
2018-05-25 20:24:28 -07:00
2018-03-27 09:51:23 +02:00
2018-03-22 13:08:20 +01:00
2018-03-20 03:17:37 +02:00
2018-02-21 15:35:42 -08:00
2018-02-21 15:35:42 -08:00
2017-11-18 10:26:57 -08:00