samples/bpf: make bpf_load.c code compatible with ELF maps section changes
authorJesper Dangaard Brouer <brouer@redhat.com>
Tue, 2 May 2017 12:31:56 +0000 (14:31 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 3 May 2017 13:30:24 +0000 (09:30 -0400)
commit156450d9d964447adfb44a231c634d2f5609d110
treeb3f44925e03340a41e4ca5dd6d454e057cd04952
parent55de170382a92d6da6fc9f23efc21eb2f3d25126
samples/bpf: make bpf_load.c code compatible with ELF maps section changes

This patch does proper parsing of the ELF "maps" section, in-order to
be both backwards and forwards compatible with changes to the map
definition struct bpf_map_def, which gets compiled into the ELF file.

The assumption is that new features with value zero, means that they
are not in-use.  For backward compatibility where loading an ELF file
with a smaller struct bpf_map_def, only copy objects ELF size, leaving
rest of loaders struct zero.  For forward compatibility where ELF file
have a larger struct bpf_map_def, only copy loaders own struct size
and verify that rest of the larger struct is zero, assuming this means
the newer feature was not activated, thus it should be safe for this
older loader to load this newer ELF file.

Fixes: fb30d4b71214 ("bpf: Add tests for map-in-map")
Fixes: 409526bea3c3 ("samples/bpf: bpf_load.c detect and abort if ELF maps section size is wrong")
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
samples/bpf/bpf_load.c