selftests/bpf: Test narrow load from bpf_sysctl.write
authorIlya Leoshkevich <iii@linux.ibm.com>
Tue, 29 Oct 2019 14:30:27 +0000 (15:30 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 30 Oct 2019 15:24:06 +0000 (16:24 +0100)
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
tools/testing/selftests/bpf/test_sysctl.c

index a320e38..7aff907 100644 (file)
@@ -120,6 +120,29 @@ static struct sysctl_test tests[] = {
                .newval = "(none)", /* same as default, should fail anyway */
                .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 = {