From c83aec52e59c37c6af352c8784b4984bad3a2412 Mon Sep 17 00:00:00 2001 From: Brian Haley Date: Fri, 11 Apr 2008 00:38:24 -0400 Subject: [PATCH] --- yaml --- r: 90642 b: refs/heads/master c: 876c7f41961dc5172b03cbf2dca65f05003f28a0 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/net/ipv6/raw.c | 14 ++++---------- trunk/net/ipv6/udp.c | 5 ++++- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 5ad97b1f367c..8c5b753eae25 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6ac7eb0868ccc9a2c597d6fd0b1ea09dcdc396ed +refs/heads/master: 876c7f41961dc5172b03cbf2dca65f05003f28a0 diff --git a/trunk/net/ipv6/raw.c b/trunk/net/ipv6/raw.c index 088b80b4ce74..059298baa1dd 100644 --- a/trunk/net/ipv6/raw.c +++ b/trunk/net/ipv6/raw.c @@ -805,15 +805,6 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, fl.fl6_flowlabel = np->flow_label; } - if (ipv6_addr_any(daddr)) { - /* - * unspecified destination address - * treated as error... is this correct ? - */ - fl6_sock_release(flowlabel); - return(-EINVAL); - } - if (fl.oif == 0) fl.oif = sk->sk_bound_dev_if; @@ -846,7 +837,10 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, if (err) goto out; - ipv6_addr_copy(&fl.fl6_dst, daddr); + if (!ipv6_addr_any(daddr)) + ipv6_addr_copy(&fl.fl6_dst, daddr); + else + fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */ if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr)) ipv6_addr_copy(&fl.fl6_src, &np->saddr); diff --git a/trunk/net/ipv6/udp.c b/trunk/net/ipv6/udp.c index 30ef7dc5d403..1fd784f3e2ec 100644 --- a/trunk/net/ipv6/udp.c +++ b/trunk/net/ipv6/udp.c @@ -752,7 +752,10 @@ int udpv6_sendmsg(struct kiocb *iocb, struct sock *sk, opt = ipv6_fixup_options(&opt_space, opt); fl.proto = sk->sk_protocol; - ipv6_addr_copy(&fl.fl6_dst, daddr); + if (!ipv6_addr_any(daddr)) + ipv6_addr_copy(&fl.fl6_dst, daddr); + else + fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */ if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr)) ipv6_addr_copy(&fl.fl6_src, &np->saddr); fl.fl_ip_sport = inet->sport;