bpf: Set need_defer as false when clearing fd array during map free
authorHou Tao <houtao1@huawei.com>
Mon, 4 Dec 2023 14:04:21 +0000 (22:04 +0800)
committerAlexei Starovoitov <ast@kernel.org>
Tue, 5 Dec 2023 01:50:26 +0000 (17:50 -0800)
commit79d93b3c6ffd79abcd8e43345980aa1e904879c4
tree3410665d3a66d115e32defd5244e6319f93c6d39
parent20c20bd11a0702ce4dc9300c3da58acf551d9725
bpf: Set need_defer as false when clearing fd array during map free

Both map deletion operation, map release and map free operation use
fd_array_map_delete_elem() to remove the element from fd array and
need_defer is always true in fd_array_map_delete_elem(). For the map
deletion operation and map release operation, need_defer=true is
necessary, because the bpf program, which accesses the element in fd
array, may still alive. However for map free operation, it is certain
that the bpf program which owns the fd array has already been exited, so
setting need_defer as false is appropriate for map free operation.

So fix it by adding need_defer parameter to bpf_fd_array_map_clear() and
adding a new helper __fd_array_map_delete_elem() to handle the map
deletion, map release and map free operations correspondingly.

Signed-off-by: Hou Tao <houtao1@huawei.com>
Link: https://lore.kernel.org/r/20231204140425.1480317-4-houtao@huaweicloud.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
kernel/bpf/arraymap.c