Skip to content

Commit 2233000

Browse files
David Aherndavem330
authored andcommitted
net/ipv6: Move call_fib6_entry_notifiers up for route adds
Move call to call_fib6_entry_notifiers for new IPv6 routes to right before the insertion into the FIB. At this point notifier handlers can decide the fate of the new route with a clean path to delete the potential new entry if the notifier returns non-0. Signed-off-by: David Ahern <[email protected]> Reviewed-by: Ido Schimmel <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent c1d7ee6 commit 2233000

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

net/ipv6/ip6_fib.c

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,12 +1007,16 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt,
10071007
if (err)
10081008
return err;
10091009

1010+
err = call_fib6_entry_notifiers(info->nl_net,
1011+
FIB_EVENT_ENTRY_ADD,
1012+
rt, extack);
1013+
if (err)
1014+
return err;
1015+
10101016
rcu_assign_pointer(rt->rt6_next, iter);
10111017
atomic_inc(&rt->rt6i_ref);
10121018
rcu_assign_pointer(rt->rt6i_node, fn);
10131019
rcu_assign_pointer(*ins, rt);
1014-
call_fib6_entry_notifiers(info->nl_net, FIB_EVENT_ENTRY_ADD,
1015-
rt, extack);
10161020
if (!info->skip_notify)
10171021
inet6_rt_notify(RTM_NEWROUTE, rt, info, nlflags);
10181022
info->nl_net->ipv6.rt6_stats->fib_rt_entries++;
@@ -1036,12 +1040,16 @@ static int fib6_add_rt2node(struct fib6_node *fn, struct rt6_info *rt,
10361040
if (err)
10371041
return err;
10381042

1043+
err = call_fib6_entry_notifiers(info->nl_net,
1044+
FIB_EVENT_ENTRY_REPLACE,
1045+
rt, extack);
1046+
if (err)
1047+
return err;
1048+
10391049
atomic_inc(&rt->rt6i_ref);
10401050
rcu_assign_pointer(rt->rt6i_node, fn);
10411051
rt->rt6_next = iter->rt6_next;
10421052
rcu_assign_pointer(*ins, rt);
1043-
call_fib6_entry_notifiers(info->nl_net, FIB_EVENT_ENTRY_REPLACE,
1044-
rt, extack);
10451053
if (!info->skip_notify)
10461054
inet6_rt_notify(RTM_NEWROUTE, rt, info, NLM_F_REPLACE);
10471055
if (!(fn->fn_flags & RTN_RTINFO)) {

0 commit comments

Comments
 (0)