diff options
author | Ilya Leoshkevich <iii@linux.ibm.com> | 2019-10-29 15:30:27 +0100 |
---|---|---|
committer | Daniel Borkmann <daniel@iogearbox.net> | 2019-10-30 16:24:06 +0100 |
commit | 9ffccb76062ab882e45bbfb9d370e366c27fa04b (patch) | |
tree | 443119fa087f5a9753a64c3c92ce9a6e8172d2a8 | |
parent | 15ab09bdca616538597fe4d2eb4db3c2d28716ba (diff) | |
download | linux-stable-9ffccb76062ab882e45bbfb9d370e366c27fa04b.tar.gz linux-stable-9ffccb76062ab882e45bbfb9d370e366c27fa04b.tar.bz2 linux-stable-9ffccb76062ab882e45bbfb9d370e366c27fa04b.zip |
selftests/bpf: Test narrow load from bpf_sysctl.write
There are tests for full and narrows loads from bpf_sysctl.file_pos, but
for bpf_sysctl.write only full load is tested. Add the missing test.
Suggested-by: Andrey Ignatov <rdna@fb.com>
Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Andrey Ignatov <rdna@fb.com>
Link: https://lore.kernel.org/bpf/20191029143027.28681-1-iii@linux.ibm.com
-rw-r--r-- | tools/testing/selftests/bpf/test_sysctl.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/test_sysctl.c b/tools/testing/selftests/bpf/test_sysctl.c index a320e3844b17..7aff907003d3 100644 --- a/tools/testing/selftests/bpf/test_sysctl.c +++ b/tools/testing/selftests/bpf/test_sysctl.c @@ -121,6 +121,29 @@ static struct sysctl_test tests[] = { .result = OP_EPERM, }, { + .descr = "ctx:write sysctl:write read ok narrow", + .insns = { + /* u64 w = (u16)write & 1; */ +#if __BYTE_ORDER == __LITTLE_ENDIAN + BPF_LDX_MEM(BPF_H, BPF_REG_7, BPF_REG_1, + offsetof(struct bpf_sysctl, write)), +#else + BPF_LDX_MEM(BPF_H, BPF_REG_7, BPF_REG_1, + offsetof(struct bpf_sysctl, write) + 2), +#endif + BPF_ALU64_IMM(BPF_AND, BPF_REG_7, 1), + /* return 1 - w; */ + BPF_MOV64_IMM(BPF_REG_0, 1), + BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_7), + BPF_EXIT_INSN(), + }, + .attach_type = BPF_CGROUP_SYSCTL, + .sysctl = "kernel/domainname", + .open_flags = O_WRONLY, + .newval = "(none)", /* same as default, should fail anyway */ + .result = OP_EPERM, + }, + { .descr = "ctx:write sysctl:read write reject", .insns = { /* write = X */ |