bpf: allow ctx writes using BPF_ST_MEM instruction
authorEduard Zingerman <eddyz87@gmail.com>
Sat, 4 Mar 2023 01:12:45 +0000 (03:12 +0200)
committerAlexei Starovoitov <ast@kernel.org>
Sat, 4 Mar 2023 05:41:46 +0000 (21:41 -0800)
commit0d80a619c113d0e216dbffa56b2d5ccc079ee520
treebad7c21446e482a428dd6c6e3c9fd13d36d368f7
parente768e3c5aab44ee63f58649d4c8cbbb3270e5c06
bpf: allow ctx writes using BPF_ST_MEM instruction

Lift verifier restriction to use BPF_ST_MEM instructions to write to
context data structures. This requires the following changes:
 - verifier.c:do_check() for BPF_ST updated to:
   - no longer forbid writes to registers of type PTR_TO_CTX;
   - track dst_reg type in the env->insn_aux_data[...].ptr_type field
     (same way it is done for BPF_STX and BPF_LDX instructions).
 - verifier.c:convert_ctx_access() and various callbacks invoked by
   it are updated to handled BPF_ST instruction alongside BPF_STX.

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20230304011247.566040-2-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/cgroup.c
kernel/bpf/verifier.c
net/core/filter.c
tools/testing/selftests/bpf/verifier/ctx.c