netfilter: nf_tables: fix table flag updates
The dormant flag need to be updated from the preparation phase, otherwise, two consecutive requests to dorm a table in the same batch might try to remove the same hooks twice, resulting in the following warning: hook not found, pf 3 num 0 WARNING: CPU: 0 PID: 334 at net/netfilter/core.c:480 __nf_unregister_net_hook+0x1eb/0x610 net/netfilter/core.c:480 Modules linked in: CPU: 0 PID: 334 Comm: kworker/u4:5 Not tainted 5.12.0-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Workqueue: netns cleanup_net RIP: 0010:__nf_unregister_net_hook+0x1eb/0x610 net/netfilter/core.c:480 This patch is a partial revert of 0ce7cf41 ("netfilter: nftables: update table flags from the commit phase") to restore the previous behaviour. However, there is still another problem: A batch containing a series of dorm-wakeup-dorm table and vice-versa also trigger the warning above since hook unregistration happens from the preparation phase, while hook registration occurs from the commit phase. To fix this problem, this patch adds two internal flags to annotate the original dormant flag status which are __NFT_TABLE_F_WAS_DORMANT and __NFT_TABLE_F_WAS_AWAKEN, to restore it from the abort path. The __NFT_TABLE_F_UPDATE bitmask allows to handle the dormant flag update with one single transaction. Reported-by: <syzbot+7ad5cd1615f2d89c6e7e@syzkaller.appspotmail.com> Fixes: 0ce7cf41 ("netfilter: nftables: update table flags from the commit phase") Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-
mentioned in commit d9c4da8c
-
mentioned in commit 7ce66afc
-
mentioned in commit e10f661a
-
mentioned in commit c35df8b8
-
mentioned in commit 664264a5
-
mentioned in commit 0c9302a6
-
mentioned in commit f2135bbf
-
mentioned in commit 4d37f127
-
mentioned in commit 640dbf68
-
mentioned in commit 9683cb6c
-
mentioned in commit 2531f907
-
mentioned in commit 6cbbe1ba
-
mentioned in commit 2aeb805a
Please register or sign in to comment