Don't allow mapped address after binding to ipv4.

From: Hideaki YOSHIFUJI (yoshfuji@v6.linux.or.jp)
Date: Thu Aug 03 2000 - 22:22:57 EST


Hi forks,

linux-2.2.16 and linux-2.4.0-test5 allow to let an application bind an
inet6 socket sd6 to an address / a port that is already bound to inet
socket sd4. For example, the 2nd step below should fail.

 1. bind sd4 to 127.0.0.1
 2. bind sd6 to ::ffff:127.0.0.1

Here a patch to fix this problem (for 2.2.16; maybe for 2.4.0-test5).
Thanks in advance.

diff -u linux-2.2.16/net/ipv6/tcp_ipv6.c linux-2.2.16-fix/net/ipv6/tcp_ipv6.c
--- linux-2.2.16/net/ipv6/tcp_ipv6.c Thu May 4 09:16:53 2000
+++ linux-2.2.16-fix/net/ipv6/tcp_ipv6.c Fri Aug 4 01:08:18 2000
@@ -140,7 +140,12 @@
                                                     !ipv6_addr_cmp(&sk->net_pinfo.af_inet6.rcv_saddr,
                                                                    sk2->state != TCP_TIME_WAIT ?
                                                                    &sk2->net_pinfo.af_inet6.rcv_saddr :
- &((struct tcp_tw_bucket*)sk)->v6_rcv_saddr))
+ &((struct tcp_tw_bucket*)sk)->v6_rcv_saddr) ||
+ (addr_type == IPV6_ADDR_MAPPED && sk2->family == AF_INET &&
+ sk->rcv_saddr == (sk2->state != TCP_TIME_WAIT ?
+ sk2->rcv_saddr : ((struct tcp_tw_bucket*)sk)->rcv_saddr)
+ )
+ )
                                                         break;
                                         }
                                 }
diff -u linux-2.2.16/net/ipv6/udp.c linux-2.2.16-fix/net/ipv6/udp.c
--- linux-2.2.16/net/ipv6/udp.c Tue Aug 10 04:04:41 1999
+++ linux-2.2.16-fix/net/ipv6/udp.c Fri Aug 4 11:29:24 2000
@@ -105,7 +105,9 @@
                             (!sk2->rcv_saddr ||
                              addr_type == IPV6_ADDR_ANY ||
                              !ipv6_addr_cmp(&sk->net_pinfo.af_inet6.rcv_saddr,
- &sk2->net_pinfo.af_inet6.rcv_saddr)) &&
+ &sk2->net_pinfo.af_inet6.rcv_saddr) ||
+ (addr_type == IPV6_ADDR_MAPPED && sk2->family == AF_INET &&
+ sk->rcv_saddr == sk2->rcv_saddr)) &&
                             (!sk2->reuse || !sk->reuse))
                                 goto fail;
                 }

-- 
Hideaki YOSHIFUJI @ USAGI Project  <yoshfuji@v6.linux.or.jp>
Web Page: http://www.ecei.tohoku.ac.jp/%7Eyoshfuji/
PGP5i FP: F731 6599 5EB2 BBA7 1515  1323 1806 A96F 5700 6B25 

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Aug 07 2000 - 21:00:12 EST