|
@@ -64,7 +64,7 @@ static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
|
|
|
struct sock *sk;
|
|
|
|
|
|
sk_for_each_bound(sk, &l2tp_ip6_bind_table) {
|
|
|
- const struct in6_addr *addr = inet6_rcv_saddr(sk);
|
|
|
+ const struct in6_addr *sk_laddr = inet6_rcv_saddr(sk);
|
|
|
struct l2tp_ip6_sock *l2tp = l2tp_ip6_sk(sk);
|
|
|
|
|
|
if (l2tp == NULL)
|
|
@@ -72,7 +72,7 @@ static struct sock *__l2tp_ip6_bind_lookup(struct net *net,
|
|
|
|
|
|
if ((l2tp->conn_id == tunnel_id) &&
|
|
|
net_eq(sock_net(sk), net) &&
|
|
|
- (!addr || ipv6_addr_equal(addr, laddr)) &&
|
|
|
+ (!sk_laddr || ipv6_addr_any(sk_laddr) || ipv6_addr_equal(sk_laddr, laddr)) &&
|
|
|
(!sk->sk_bound_dev_if || !dif ||
|
|
|
sk->sk_bound_dev_if == dif))
|
|
|
goto found;
|