Skip to content

Commit

Permalink
selftests/bpf: Add test validating failure on ambiguous relocation value
Browse files Browse the repository at this point in the history
Add test simulating ambiguous field size relocation, while fields themselves
are at the exact same offset.

Signed-off-by: Andrii Nakryiko <[email protected]>
Signed-off-by: Alexei Starovoitov <[email protected]>
Link: https://lore.kernel.org/bpf/[email protected]
  • Loading branch information
anakryiko authored and Alexei Starovoitov committed Aug 19, 2020
1 parent 353c788 commit 00b2e95
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
1 change: 1 addition & 0 deletions tools/testing/selftests/bpf/prog_tests/core_reloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,7 @@ static struct core_reloc_test_case test_cases[] = {
/* size relocation checks */
SIZE_CASE(size),
SIZE_CASE(size___diff_sz),
SIZE_ERR_CASE(size___err_ambiguous),
};

struct data {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#include "core_reloc_types.h"

void f(struct core_reloc_size___err_ambiguous1 x,
struct core_reloc_size___err_ambiguous2 y) {}
25 changes: 25 additions & 0 deletions tools/testing/selftests/bpf/progs/core_reloc_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -809,3 +809,28 @@ struct core_reloc_size___diff_sz {
void *ptr_field;
enum { OTHER_VALUE = 0xFFFFFFFFFFFFFFFF } enum_field;
};

/* Error case of two candidates with the fields (int_field) at the same
* offset, but with differing final relocation values: size 4 vs size 1
*/
struct core_reloc_size___err_ambiguous1 {
/* int at offset 0 */
int int_field;

struct { int x; } struct_field;
union { int x; } union_field;
int arr_field[4];
void *ptr_field;
enum { VALUE___1 = 123 } enum_field;
};

struct core_reloc_size___err_ambiguous2 {
/* char at offset 0 */
char int_field;

struct { int x; } struct_field;
union { int x; } union_field;
int arr_field[4];
void *ptr_field;
enum { VALUE___2 = 123 } enum_field;
};

0 comments on commit 00b2e95

Please sign in to comment.