Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 262493
b: refs/heads/master
c: c15fea2
h: refs/heads/master
i:
  262491: 23b7ae2
v: v3
  • Loading branch information
Max Matveev authored and David S. Miller committed Aug 5, 2011
1 parent 323d2b8 commit 421754f
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 20e72a44098641f0c4de34a31287a93e006afb5b
refs/heads/master: c15fea2d8ca834dae491339c47e4fb3c81428190
11 changes: 9 additions & 2 deletions trunk/net/ipv6/datagram.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@
#include <linux/errqueue.h>
#include <asm/uaccess.h>

static inline int ipv6_mapped_addr_any(const struct in6_addr *a)
{
return (ipv6_addr_v4mapped(a) && (a->s6_addr32[3] == 0));
}

int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
{
struct sockaddr_in6 *usin = (struct sockaddr_in6 *) uaddr;
Expand Down Expand Up @@ -102,10 +107,12 @@ int ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)

ipv6_addr_set_v4mapped(inet->inet_daddr, &np->daddr);

if (ipv6_addr_any(&np->saddr))
if (ipv6_addr_any(&np->saddr) ||
ipv6_mapped_addr_any(&np->saddr))
ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr);

if (ipv6_addr_any(&np->rcv_saddr)) {
if (ipv6_addr_any(&np->rcv_saddr) ||
ipv6_mapped_addr_any(&np->rcv_saddr)) {
ipv6_addr_set_v4mapped(inet->inet_rcv_saddr,
&np->rcv_saddr);
if (sk->sk_prot->rehash)
Expand Down

0 comments on commit 421754f

Please sign in to comment.