Brian Haley
d40a4de0be
IPv6: fix IPV6_RECVERR handling of locally-generated errors
...
I noticed when I added support for IPV6_DONTFRAG that if you set
IPV6_RECVERR and tried to send a UDP packet larger than 64K to an
IPv6 destination, you'd correctly get an EMSGSIZE, but reading from
MSG_ERRQUEUE returned the incorrect address in the cmsg:
struct msghdr:
msg_name 0x7fff8f3c96d0
msg_namelen 28
struct sockaddr_in6:
sin6_family 10
sin6_port 7639
sin6_flowinfo 0
sin6_addr ::ffff:38.32.0.0
sin6_scope_id 0 ((null))
It should have returned this in my case:
struct msghdr:
msg_name 0x7fffd866b510
msg_namelen 28
struct sockaddr_in6:
sin6_family 10
sin6_port 7639
sin6_flowinfo 0
sin6_addr 2620:0:a09:e000:21f:29ff:fe57:f88b
sin6_scope_id 0 ((null))
The problem is that ipv6_recv_error() assumes that if the error
wasn't generated by ICMPv6, it's an IPv4 address sitting there,
and proceeds to create a v4-mapped address from it.
Change ipv6_icmp_error() and ipv6_local_error() to set skb->protocol
to htons(ETH_P_IPV6) so that ipv6_recv_error() knows the address
sitting right after the extended error is IPv6, else it will
incorrectly map the first octet into an IPv4-mapped IPv6 address
in the cmsg structure returned in a recvmsg() call to obtain
the error.
Signed-off-by: Brian Haley <brian.haley@hp.com>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-05-05 21:32:40 -07:00
..
netfilter
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
addrconf.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
addrconf_core.c
ipv6: Remove IPV6_ADDR_RESERVED
2010-02-26 03:59:07 -08:00
addrlabel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
af_inet6.c
ipv6: Fix default multicast hops setting.
2010-05-03 23:42:27 -07:00
ah6.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
anycast.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
datagram.c
IPv6: fix IPV6_RECVERR handling of locally-generated errors
2010-05-05 21:32:40 -07:00
esp6.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
exthdrs.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
exthdrs_core.c
fib6_rules.c
ipv6: Optmize translation between IPV6_PREFER_SRC_xxx and RT6_LOOKUP_F_xxx.
2010-03-07 15:25:53 -08:00
icmp.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
inet6_connection_sock.c
Revert "tcp: bind() fix when many ports are bound"
2010-04-28 11:25:59 -07:00
inet6_hashtables.c
tcp: Fix a connect() race with timewait sockets
2009-12-08 20:17:51 -08:00
ip6_fib.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ip6_flowlabel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ip6_input.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ip6_output.c
ipv6: allow to send packet after receiving ICMPv6 Too Big message with MTU field less than IPV6_MIN_MTU
2010-04-21 22:48:26 -07:00
ip6_tunnel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ip6mr.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
ipcomp6.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
ipv6_sockglue.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
Kconfig
IPv6: Fix 6RD typo
2009-10-07 14:50:30 -07:00
Makefile
mcast.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
mip6.c
ipv6: drop unused "dev" arg of icmpv6_send()
2010-02-18 14:30:17 -08:00
ndisc.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
netfilter.c
proc.c
percpu: add __percpu sparse annotations to net
2010-02-16 23:05:38 -08:00
protocol.c
raw.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
reassembly.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
route.c
net: ipv6 bind to device issue
2010-04-21 22:59:24 -07:00
sit.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
syncookies.c
net: Add rtnetlink init_rcvwnd to set the TCP initial receive window
2009-12-23 14:13:30 -08:00
sysctl_net_ipv6.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
tcp_ipv6.c
ipv6: Fix tcp_v6_send_response transport header setting.
2010-04-21 00:47:15 -07:00
tunnel6.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
udp.c
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
2010-04-11 02:44:30 -07:00
udp_impl.h
net: Make setsockopt() optlen be unsigned.
2009-09-30 16:12:20 -07:00
udplite.c
net: spread __net_init, __net_exit
2010-01-17 19:16:02 -08:00
xfrm6_input.c
xfrm: SA lookups signature with mark
2010-02-22 16:20:22 -08:00
xfrm6_mode_beet.c
xfrm6_mode_ro.c
xfrm6_mode_transport.c
xfrm6_mode_tunnel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00
xfrm6_output.c
ipv6: drop unused "dev" arg of icmpv6_send()
2010-02-18 14:30:17 -08:00
xfrm6_policy.c
xfrm6: ensure to use the same dev when building a bundle
2010-04-21 16:25:30 -07:00
xfrm6_state.c
xfrm6_tunnel.c
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
2010-03-30 22:02:32 +09:00