|
@@ -1193,14 +1193,16 @@ struct dst_entry *ip6_route_output(struct net *net, const struct sock *sk,
|
|
|
struct flowi6 *fl6)
|
|
|
{
|
|
|
int flags = 0;
|
|
|
+ bool any_src;
|
|
|
|
|
|
fl6->flowi6_iif = LOOPBACK_IFINDEX;
|
|
|
|
|
|
+ any_src = ipv6_addr_any(&fl6->saddr);
|
|
|
if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) ||
|
|
|
- fl6->flowi6_oif)
|
|
|
+ (fl6->flowi6_oif && any_src))
|
|
|
flags |= RT6_LOOKUP_F_IFACE;
|
|
|
|
|
|
- if (!ipv6_addr_any(&fl6->saddr))
|
|
|
+ if (!any_src)
|
|
|
flags |= RT6_LOOKUP_F_HAS_SADDR;
|
|
|
else if (sk)
|
|
|
flags |= rt6_srcprefs2flags(inet6_sk(sk)->srcprefs);
|