bpf: Fix cgroup local storage prog tracking
authorDaniel Borkmann <daniel@iogearbox.net>
Tue, 17 Dec 2019 12:28:16 +0000 (13:28 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 17 Dec 2019 16:58:02 +0000 (08:58 -0800)
commite47304232b373362228bf233f17bd12b11c9aafc
treeb08fea42367c08dec3f9190689f0a6c84dd84068
parenta2ea07465c8d7984cc6b8b1f0b3324f9b138094a
bpf: Fix cgroup local storage prog tracking

Recently noticed that we're tracking programs related to local storage maps
through their prog pointer. This is a wrong assumption since the prog pointer
can still change throughout the verification process, for example, whenever
bpf_patch_insn_single() is called.

Therefore, the prog pointer that was assigned via bpf_cgroup_storage_assign()
is not guaranteed to be the same as we pass in bpf_cgroup_storage_release()
and the map would therefore remain in busy state forever. Fix this by using
the prog's aux pointer which is stable throughout verification and beyond.

Fixes: de9cbbaadba5 ("bpf: introduce cgroup storage maps")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Cc: Roman Gushchin <guro@fb.com>
Cc: Martin KaFai Lau <kafai@fb.com>
Link: https://lore.kernel.org/bpf/1471c69eca3022218666f909bc927a92388fd09e.1576580332.git.daniel@iogearbox.net
include/linux/bpf-cgroup.h
kernel/bpf/core.c
kernel/bpf/local_storage.c
kernel/bpf/verifier.c