First git repo commit for the libreCMC project
[librecmc/librecmc.git] / package / utils / busybox / patches / 002-libbb-send_to_from-do-not-require-that-to-should-hav.patch
1 From 7cef4817d6d6d61a1166ed7dfc13537b95c65970 Mon Sep 17 00:00:00 2001
2 From: Denys Vlasenko <vda.linux@googlemail.com>
3 Date: Thu, 15 Sep 2016 13:20:51 +0200
4 Subject: [PATCH] libbb:/send_to_from: do not require that "to" should have the
5  same AF. Closes 9146
6
7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
8 ---
9  libbb/udp_io.c | 10 ++++++++--
10  1 file changed, 8 insertions(+), 2 deletions(-)
11
12 --- a/libbb/udp_io.c
13 +++ b/libbb/udp_io.c
14 @@ -70,7 +70,13 @@ send_to_from(int fd, void *buf, size_t l
15         msg.msg_flags = flags;
16  
17         cmsgptr = CMSG_FIRSTHDR(&msg);
18 -       if (to->sa_family == AF_INET && from->sa_family == AF_INET) {
19 +       /*
20 +        * Users report that to->sa_family can be AF_INET6 too,
21 +        * if "to" was acquired by recv_from_to(). IOW: recv_from_to()
22 +        * was seen showing IPv6 "from" even when the destination
23 +        * of received packet (our local address) was IPv4.
24 +        */
25 +       if (/* to->sa_family == AF_INET && */ from->sa_family == AF_INET) {
26                 struct in_pktinfo *pktptr;
27                 cmsgptr->cmsg_level = IPPROTO_IP;
28                 cmsgptr->cmsg_type = IP_PKTINFO;
29 @@ -86,7 +92,7 @@ send_to_from(int fd, void *buf, size_t l
30                 pktptr->ipi_spec_dst = ((struct sockaddr_in*)from)->sin_addr;
31         }
32  # if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
33 -       else if (to->sa_family == AF_INET6 && from->sa_family == AF_INET6) {
34 +       else if (/* to->sa_family == AF_INET6 && */ from->sa_family == AF_INET6) {
35                 struct in6_pktinfo *pktptr;
36                 cmsgptr->cmsg_level = IPPROTO_IPV6;
37                 cmsgptr->cmsg_type = IPV6_PKTINFO;