On Mon, 2022-02-21 at 19:03 +0100, Jakub Sitnicki wrote: > 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. */ Unfortunately this doesn't help with the s390 problem. I'll try to debug this.