From: Kumar Kartikeya Dwivedi Date: Sat, 19 Mar 2022 08:08:25 +0000 (+0530) Subject: bpf: Reject writes for PTR_TO_MAP_KEY in check_helper_mem_access X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=5d0bba8232bf22ce13747cbfc8f696318ff01a50;p=linux.git bpf: Reject writes for PTR_TO_MAP_KEY in check_helper_mem_access commit 7b3552d3f9f6897851fc453b5131a967167e43c2 upstream. It is not permitted to write to PTR_TO_MAP_KEY, but the current code in check_helper_mem_access would allow for it, reject this case as well, as helpers taking ARG_PTR_TO_UNINIT_MEM also take PTR_TO_MAP_KEY. Fixes: 69c087ba6225 ("bpf: Add bpf_for_each_map_elem() helper") Signed-off-by: Kumar Kartikeya Dwivedi Link: https://lore.kernel.org/r/20220319080827.73251-4-memxor@gmail.com Signed-off-by: Alexei Starovoitov Signed-off-by: Greg Kroah-Hartman --- diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index d2b119b4fbe74..db5f56643b621 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -4587,6 +4587,11 @@ static int check_helper_mem_access(struct bpf_verifier_env *env, int regno, return check_packet_access(env, regno, reg->off, access_size, zero_size_allowed); case PTR_TO_MAP_KEY: + if (meta && meta->raw_mode) { + verbose(env, "R%d cannot write into %s\n", regno, + reg_type_str(env, reg->type)); + return -EACCES; + } return check_mem_region_access(env, regno, reg->off, access_size, reg->map_ptr->key_size, false); case PTR_TO_MAP_VALUE: