Shifting 16-bit type by 16 bits is implementation-defined for BPF programs. Don't rely on it in case it is causing the test failures we are seeing on s390x z15 target. Fixes: 2ed0dc5937d3 ("selftests/bpf: Cover 4-byte load from remote_port in bpf_sk_lookup") Reported-by: Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> Signed-off-by: Jakub Sitnicki <jakub@xxxxxxxxxxxxxx> --- I don't have a dev env for s390x/z15 set up yet, so can't definitely confirm the fix. That said, it seems worth fixing either way. tools/testing/selftests/bpf/progs/test_sk_lookup.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/progs/test_sk_lookup.c b/tools/testing/selftests/bpf/progs/test_sk_lookup.c index bf5b7caefdd0..7d47276a8964 100644 --- a/tools/testing/selftests/bpf/progs/test_sk_lookup.c +++ b/tools/testing/selftests/bpf/progs/test_sk_lookup.c @@ -65,6 +65,7 @@ static const __u32 KEY_SERVER_A = SERVER_A; static const __u32 KEY_SERVER_B = SERVER_B; static const __u16 SRC_PORT = bpf_htons(8008); +static const __u32 SRC_PORT_U32 = bpf_htonl(8008U << 16); static const __u32 SRC_IP4 = IP4(127, 0, 0, 2); static const __u32 SRC_IP6[] = IP6(0xfd000000, 0x0, 0x0, 0x00000002); @@ -421,7 +422,7 @@ int ctx_narrow_access(struct bpf_sk_lookup *ctx) /* Load from remote_port field with zero padding (backward compatibility) */ val_u32 = *(__u32 *)&ctx->remote_port; - if (val_u32 != bpf_htonl(bpf_ntohs(SRC_PORT) << 16)) + if (val_u32 != SRC_PORT_U32) return SK_DROP; /* Narrow loads from local_port field. Expect DST_PORT. */ -- 2.35.1