selftests/bpf: test narrow load from bpf_sysctl.write
Subsystems (3)
PATCH 1/1 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 <[email protected]>
Signed-off-by Ilya Leoshkevich <[email protected]>
--- tools/testing/selftests/bpf/test_sysctl.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
tools/testing/selftests/bpf/test_sysctl.c +23 -0
@@ -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 = {
Signature · 1 line
2.23.0
Ilya Leoshkevich <[email protected]> [Tue, 2019-10-29 07:31 -0700]:
Quoted 5 lines
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 <[email protected]>Signed-off-by Ilya Leoshkevich <[email protected]>
Thank you!
Acked-by Andrey Ignatov <[email protected]>
Quoted 41 lines
--- tools/testing/selftests/bpf/test_sysctl.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)tools/testing/selftests/bpf/test_sysctl.c +23
-0@@ -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 = {Signature · 1 line
2.23.0
Signature · 1 line
Andrey Ignatov
Quoted 5 lines · Ilya Leoshkevich
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 <[email protected]>Signed-off-by Ilya Leoshkevich <[email protected]>
Applied, thanks!