提交 967ab999 编写于 作者: P Pavel Emelyanov 提交者: David S. Miller

netfilter: xt_hashlimit: fix race between htable_destroy and htable_gc

Deleting a timer with del_timer doesn't guarantee, that the
timer function is not running at the moment of deletion. Thus
in the xt_hashlimit case we can get into a ticklish situation
when the htable_gc rearms the timer back and we'll actually
delete an entry with a pending timer.

Fix it with using del_timer_sync().

AFAIK del_timer_sync checks for the timer to be pending by
itself, so I remove the check.
Signed-off-by: NPavel Emelyanov <xemul@openvz.org>
Signed-off-by: NPatrick McHardy <kaber@trash.net>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 a8ddc916
...@@ -367,9 +367,7 @@ static void htable_gc(unsigned long htlong) ...@@ -367,9 +367,7 @@ static void htable_gc(unsigned long htlong)
static void htable_destroy(struct xt_hashlimit_htable *hinfo) static void htable_destroy(struct xt_hashlimit_htable *hinfo)
{ {
/* remove timer, if it is pending */ del_timer_sync(&hinfo->timer);
if (timer_pending(&hinfo->timer))
del_timer(&hinfo->timer);
/* remove proc entry */ /* remove proc entry */
remove_proc_entry(hinfo->pde->name, remove_proc_entry(hinfo->pde->name,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册