aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorOlivier Matz <olivier.matz@6wind.com>2019-06-06 09:15:19 +0200
committerDavid S. Miller <davem@davemloft.net>2019-06-06 10:29:21 -0700
commitb9aa52c4cb457e7416cc0c95f475e72ef4a61336 (patch)
tree2dbe76f0f5c136bcb3c378d5e5c0a98dacdac774 /scripts
parentipv6: use READ_ONCE() for inet->hdrincl as in ipv4 (diff)
downloadlinux-dev-b9aa52c4cb457e7416cc0c95f475e72ef4a61336.tar.xz
linux-dev-b9aa52c4cb457e7416cc0c95f475e72ef4a61336.zip
ipv6: fix EFAULT on sendto with icmpv6 and hdrincl
The following code returns EFAULT (Bad address): s = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); setsockopt(s, SOL_IPV6, IPV6_HDRINCL, 1); sendto(ipv6_icmp6_packet, addr); /* returns -1, errno = EFAULT */ The IPv4 equivalent code works. A workaround is to use IPPROTO_RAW instead of IPPROTO_ICMPV6. The failure happens because 2 bytes are eaten from the msghdr by rawv6_probe_proto_opt() starting from commit 19e3c66b52ca ("ipv6 equivalent of "ipv4: Avoid reading user iov twice after raw_probe_proto_opt""), but at that time it was not a problem because IPV6_HDRINCL was not yet introduced. Only eat these 2 bytes if hdrincl == 0. Fixes: 715f504b1189 ("ipv6: add IPV6_HDRINCL option for raw sockets") Signed-off-by: Olivier Matz <olivier.matz@6wind.com> Acked-by: Nicolas Dichtel <nicolas.dichtel@6wind.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'scripts')
0 files changed, 0 insertions, 0 deletions