]> git.baikalelectronics.ru Git - kernel.git/commit
bpf, devmap: Fix premature entry free on destroying map
authorToshiaki Makita <toshiaki.makita1@gmail.com>
Fri, 14 Jun 2019 08:20:13 +0000 (17:20 +0900)
committerDaniel Borkmann <daniel@iogearbox.net>
Fri, 14 Jun 2019 22:58:42 +0000 (00:58 +0200)
commitf7930e4b8ca1e9e7a3fd21f95f68ce35dddfb073
treed22755648032058eb1fd16f29eb58d32ce5ad683
parente736ca62682071b13212f56e80fe25c2832d2a4c
bpf, devmap: Fix premature entry free on destroying map

dev_map_free() waits for flush_needed bitmap to be empty in order to
ensure all flush operations have completed before freeing its entries.
However the corresponding clear_bit() was called before using the
entries, so the entries could be used after free.

All access to the entries needs to be done before clearing the bit.
It seems commit fd4282b8e33b ("bpf: netdev is never null in
__dev_map_flush") accidentally changed the clear_bit() and memory access
order.

Note that the problem happens only in __dev_map_flush(), not in
dev_map_flush_old(). dev_map_flush_old() is called only after nulling
out the corresponding netdev_map entry, so dev_map_free() never frees
the entry thus no such race happens there.

Fixes: fd4282b8e33b ("bpf: netdev is never null in __dev_map_flush")
Signed-off-by: Toshiaki Makita <toshiaki.makita1@gmail.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
kernel/bpf/devmap.c