ipv6: Fix __ip6_route_redirect
In my last commit (a3c00e4
: ipv6: Remove BACKTRACK macro), the changes in __ip6_route_redirect is incorrect. The following case is missed: 1. The for loop tries to find a valid gateway rt. If it fails to find one, rt will be NULL. 2. When rt is NULL, it is set to the ip6_null_entry. 3. The newly added 'else if', froma3c00e4
, will stop the backtrack from happening. Signed-off-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
24df8986f3
commit
b0a1ba5992
1 changed files with 5 additions and 1 deletions
|
@ -1242,12 +1242,16 @@ static struct rt6_info *__ip6_route_redirect(struct net *net,
|
|||
rt = net->ipv6.ip6_null_entry;
|
||||
else if (rt->dst.error) {
|
||||
rt = net->ipv6.ip6_null_entry;
|
||||
} else if (rt == net->ipv6.ip6_null_entry) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (rt == net->ipv6.ip6_null_entry) {
|
||||
fn = fib6_backtrack(fn, &fl6->saddr);
|
||||
if (fn)
|
||||
goto restart;
|
||||
}
|
||||
|
||||
out:
|
||||
dst_hold(&rt->dst);
|
||||
|
||||
read_unlock_bh(&table->tb6_lock);
|
||||
|
|
Loading…
Reference in a new issue