fib: fix fib_nl_newrule()
authorEric Dumazet <eric.dumazet@gmail.com>
Sat, 23 Oct 2010 09:44:25 +0000 (09:44 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Oct 2010 18:42:38 +0000 (11:42 -0700)
commitebb9fed2defa55f2ca91c8be582c59612e9940d1
tree00c749fb425cc1c30222d9911017849861ed2627
parent1941bf8c8d9392b18cd9bfed8050a2d78850aede
fib: fix fib_nl_newrule()

Some panic reports in fib_rules_lookup() show a rule could have a NULL
pointer as a next pointer in the rules_list.

This can actually happen because of a bug in fib_nl_newrule() : It
checks if current rule is the destination of unresolved gotos. (Other
rules have gotos to this about to be inserted rule)

Problem is it does the resolution of the gotos before the rule is
inserted in the rules_list (and has a valid next pointer)

Fix this by moving the rules_list insertion before the changes on gotos.

A lockless reader can not any more follow a ctarget pointer, unless
destination is ready (has a valid next pointer)

Reported-by: Oleg A. Arkhangelsky <sysoleg@yandex.ru>
Reported-by: Joe Buehler <aspam@cox.net>
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/fib_rules.c