mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-02 17:26:42 +09:00
fib:fix BUG_ON in fib_nl_newrule when add new fib rule
[ Upstream commit 561dac2d41 ]
add new fib rule can cause BUG_ON happen
the reproduce shell is
ip rule add pref 38
ip rule add pref 38
ip rule add to 192.168.3.0/24 goto 38
ip rule del pref 38
ip rule add to 192.168.3.0/24 goto 38
ip rule add pref 38
then the BUG_ON will happen
del BUG_ON and use (ctarget == NULL) identify whether this rule is unresolved
Signed-off-by: Gao feng <gaofeng@cn.fujitsu.com>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5ee858c9ab
commit
cbab190c50
@@ -384,8 +384,8 @@ static int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg)
|
||||
*/
|
||||
list_for_each_entry(r, &ops->rules_list, list) {
|
||||
if (r->action == FR_ACT_GOTO &&
|
||||
r->target == rule->pref) {
|
||||
BUG_ON(rtnl_dereference(r->ctarget) != NULL);
|
||||
r->target == rule->pref &&
|
||||
rtnl_dereference(r->ctarget) == NULL) {
|
||||
rcu_assign_pointer(r->ctarget, rule);
|
||||
if (--ops->unresolved_rules == 0)
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user