* [LTP] [PATCH] bpf_prog02: Correct index on big endian architectures
@ 2019-10-04 9:31 Richard Palethorpe
2019-10-04 10:27 ` Cyril Hrubis
0 siblings, 1 reply; 2+ messages in thread
From: Richard Palethorpe @ 2019-10-04 9:31 UTC (permalink / raw)
To: ltp
The array index is only 4 bytes, but we store an 8 byte double word on the
stack. This is OK on LE where the upper 4 bytes are ignored. However on BE the
lower 4 bytes are ignored and we therefor get an index of zero each time.
So we have switch to just using a single word (32bits) to store the index.
Idea-by: Gary Ching-Pang Lin <glin@suse.com>
Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
---
include/lapi/bpf.h | 1 +
testcases/kernel/syscalls/bpf/bpf_prog02.c | 8 ++++----
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/include/lapi/bpf.h b/include/lapi/bpf.h
index 03073b45e..5582e344a 100644
--- a/include/lapi/bpf.h
+++ b/include/lapi/bpf.h
@@ -24,6 +24,7 @@
#define BPF_JMP 0x05
#define BPF_SIZE(code) ((code) & 0x18)
+#define BPF_W 0x00 /* 32-bit */
#define BPF_DW 0x18 /* double word (64-bit) */
#define BPF_MODE(code) ((code) & 0xe0)
diff --git a/testcases/kernel/syscalls/bpf/bpf_prog02.c b/testcases/kernel/syscalls/bpf/bpf_prog02.c
index acb28e98e..fb8f3f781 100644
--- a/testcases/kernel/syscalls/bpf/bpf_prog02.c
+++ b/testcases/kernel/syscalls/bpf/bpf_prog02.c
@@ -43,8 +43,8 @@ static int load_prog(int fd)
BPF_LD_MAP_FD(BPF_REG_1, fd), /* 1: r1 = &fd */
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* 3: r2 = fp */
- BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), /* 4: r2 = r2 - 8 */
- BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 0), /* 5: *r2 = 0 */
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* 4: r2 = r2 - 4 */
+ BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 0), /* 5: *r2 = 0 */
BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),/* 6: map_lookup_elem */
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 17), /* 7: if(!r0) goto 25 */
BPF_MOV64_REG(BPF_REG_3, BPF_REG_0), /* 8: r3 = r0 */
@@ -54,8 +54,8 @@ static int load_prog(int fd)
BPF_LD_MAP_FD(BPF_REG_1, fd), /* 13: r1 = &fd */
BPF_MOV64_REG(BPF_REG_2, BPF_REG_10), /* 15: r2 = fp */
- BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -8), /* 16: r2 = r2 - 8 */
- BPF_ST_MEM(BPF_DW, BPF_REG_2, 0, 1), /* 17: *r2 = 1 */
+ BPF_ALU64_IMM(BPF_ADD, BPF_REG_2, -4), /* 16: r2 = r2 - 4 */
+ BPF_ST_MEM(BPF_W, BPF_REG_2, 0, 1), /* 17: *r2 = 1 */
BPF_EMIT_CALL(BPF_FUNC_map_lookup_elem),/* 18: map_lookup_elem */
BPF_JMP_IMM(BPF_JEQ, BPF_REG_0, 0, 5), /* 19: if(!r0) goto 25 */
BPF_MOV64_REG(BPF_REG_3, BPF_REG_0), /* 20: r3 = r0 */
--
2.23.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [LTP] [PATCH] bpf_prog02: Correct index on big endian architectures
2019-10-04 9:31 [LTP] [PATCH] bpf_prog02: Correct index on big endian architectures Richard Palethorpe
@ 2019-10-04 10:27 ` Cyril Hrubis
0 siblings, 0 replies; 2+ messages in thread
From: Cyril Hrubis @ 2019-10-04 10:27 UTC (permalink / raw)
To: ltp
Hi!
Pushed, thanks.
--
Cyril Hrubis
chrubis@suse.cz
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-10-04 10:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-04 9:31 [LTP] [PATCH] bpf_prog02: Correct index on big endian architectures Richard Palethorpe
2019-10-04 10:27 ` Cyril Hrubis
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.