| From 73407e3ffe82d0a0f3bbf181a1e4d4d17aa737a1 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 14 Aug 2019 12:41:09 +0200 |
| Subject: selftests/bpf: fix "bind{4, 6} deny specific IP & port" on s390 |
| |
| From: Ilya Leoshkevich <iii@linux.ibm.com> |
| |
| [ Upstream commit 27df5c7068bf23cab282dc64b1c9894429b3b8a0 ] |
| |
| "bind4 allow specific IP & port" and "bind6 deny specific IP & port" |
| fail on s390 because of endianness issue: the 4 IP address bytes are |
| loaded as a word and compared with a constant, but the value of this |
| constant should be different on big- and little- endian machines, which |
| is not the case right now. |
| |
| Use __bpf_constant_ntohl to generate proper value based on machine |
| endianness. |
| |
| Fixes: 1d436885b23b ("selftests/bpf: Selftest for sys_bind post-hooks.") |
| Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> |
| Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| tools/testing/selftests/bpf/test_sock.c | 7 +++++-- |
| 1 file changed, 5 insertions(+), 2 deletions(-) |
| |
| diff --git a/tools/testing/selftests/bpf/test_sock.c b/tools/testing/selftests/bpf/test_sock.c |
| index b8ebe2f580741..e9567122070a3 100644 |
| --- a/tools/testing/selftests/bpf/test_sock.c |
| +++ b/tools/testing/selftests/bpf/test_sock.c |
| @@ -13,6 +13,7 @@ |
| #include <bpf/bpf.h> |
| |
| #include "cgroup_helpers.h" |
| +#include "bpf_endian.h" |
| #include "bpf_rlimit.h" |
| #include "bpf_util.h" |
| |
| @@ -231,7 +232,8 @@ static struct sock_test tests[] = { |
| /* if (ip == expected && port == expected) */ |
| BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, |
| offsetof(struct bpf_sock, src_ip6[3])), |
| - BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x01000000, 4), |
| + BPF_JMP_IMM(BPF_JNE, BPF_REG_7, |
| + __bpf_constant_ntohl(0x00000001), 4), |
| BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, |
| offsetof(struct bpf_sock, src_port)), |
| BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x2001, 2), |
| @@ -260,7 +262,8 @@ static struct sock_test tests[] = { |
| /* if (ip == expected && port == expected) */ |
| BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, |
| offsetof(struct bpf_sock, src_ip4)), |
| - BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x0100007F, 4), |
| + BPF_JMP_IMM(BPF_JNE, BPF_REG_7, |
| + __bpf_constant_ntohl(0x7F000001), 4), |
| BPF_LDX_MEM(BPF_W, BPF_REG_7, BPF_REG_6, |
| offsetof(struct bpf_sock, src_port)), |
| BPF_JMP_IMM(BPF_JNE, BPF_REG_7, 0x1002, 2), |
| -- |
| 2.20.1 |
| |