fib: use atomic_inc_not_zero() in fib_rules_lookup
It seems we dont use appropriate refcount increment in an rcu_read_lock() protected section. fib_rule_get() might increment a null refcount and bad things could happen. While fib_nl_delrule() respects an rcu grace period before calling fib_rule_put(), fib_rules_cleanup_ops() calls fib_rule_put() without a grace period. Note : after this patch, we might avoid the synchronize_rcu() call done in fib_nl_delrule() Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
15fc1f7056
commit
7fa7cb7109
@ -225,10 +225,12 @@ jumped:
|
||||
err = ops->action(rule, fl, flags, arg);
|
||||
|
||||
if (err != -EAGAIN) {
|
||||
fib_rule_get(rule);
|
||||
if (likely(atomic_inc_not_zero(&rule->refcnt))) {
|
||||
arg->rule = rule;
|
||||
goto out;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
err = -ESRCH;
|
||||
|
Loading…
Reference in New Issue
Block a user