diff options
Diffstat (limited to 'net/ipv6/udp.c')
-rw-r--r-- | net/ipv6/udp.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 30ef7dc5d403..1fd784f3e2ec 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
@@ -752,7 +752,10 @@ do_udp_sendmsg: | |||
752 | opt = ipv6_fixup_options(&opt_space, opt); | 752 | opt = ipv6_fixup_options(&opt_space, opt); |
753 | 753 | ||
754 | fl.proto = sk->sk_protocol; | 754 | fl.proto = sk->sk_protocol; |
755 | ipv6_addr_copy(&fl.fl6_dst, daddr); | 755 | if (!ipv6_addr_any(daddr)) |
756 | ipv6_addr_copy(&fl.fl6_dst, daddr); | ||
757 | else | ||
758 | fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */ | ||
756 | if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr)) | 759 | if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr)) |
757 | ipv6_addr_copy(&fl.fl6_src, &np->saddr); | 760 | ipv6_addr_copy(&fl.fl6_src, &np->saddr); |
758 | fl.fl_ip_sport = inet->sport; | 761 | fl.fl_ip_sport = inet->sport; |