mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-02 23:27:06 +00:00
selftests/bpf: Fix u8 narrow load checks for bpf_sk_lookup remote_port
commit3c69611b89
upstream. In commit9a69e2b385
("bpf: Make remote_port field in struct bpf_sk_lookup 16-bit wide") ->remote_port field changed from __u32 to __be16. However, narrow load tests which exercise 1-byte sized loads from offsetof(struct bpf_sk_lookup, remote_port) were not adopted to reflect the change. As a result, on little-endian we continue testing loads from addresses: - (__u8 *)&ctx->remote_port + 3 - (__u8 *)&ctx->remote_port + 4 which map to the zero padding following the remote_port field, and don't break the tests because there is no observable change. While on big-endian, we observe breakage because tests expect to see zeros for values loaded from: - (__u8 *)&ctx->remote_port - 1 - (__u8 *)&ctx->remote_port - 2 Above addresses map to ->remote_ip6 field, which precedes ->remote_port, and are populated during the bpf_sk_lookup IPv6 tests. Unsurprisingly, on s390x we observe: #136/38 sk_lookup/narrow access to ctx v4:OK #136/39 sk_lookup/narrow access to ctx v6:FAIL Fix it by removing the checks for 1-byte loads from offsets outside of the ->remote_port field. Fixes:9a69e2b385
("bpf: Make remote_port field in struct bpf_sk_lookup 16-bit wide") Suggested-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Martin KaFai Lau <kafai@fb.com> Link: https://lore.kernel.org/bpf/20220319183356.233666-3-jakub@cloudflare.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d4cc2fb138
commit
f6aad0a59d
1 changed files with 1 additions and 2 deletions
|
@ -412,8 +412,7 @@ int ctx_narrow_access(struct bpf_sk_lookup *ctx)
|
|||
|
||||
/* Narrow loads from remote_port field. Expect SRC_PORT. */
|
||||
if (LSB(ctx->remote_port, 0) != ((SRC_PORT >> 0) & 0xff) ||
|
||||
LSB(ctx->remote_port, 1) != ((SRC_PORT >> 8) & 0xff) ||
|
||||
LSB(ctx->remote_port, 2) != 0 || LSB(ctx->remote_port, 3) != 0)
|
||||
LSB(ctx->remote_port, 1) != ((SRC_PORT >> 8) & 0xff))
|
||||
return SK_DROP;
|
||||
if (LSW(ctx->remote_port, 0) != SRC_PORT)
|
||||
return SK_DROP;
|
||||
|
|
Loading…
Reference in a new issue