]> git.pld-linux.org Git - packages/kernel.git/blobdiff - linux-ipv6-glibc2.2.patch
- obsolete
[packages/kernel.git] / linux-ipv6-glibc2.2.patch
index b18a32b2d772969e6d8bd8fcf802e391fd61cbd0..eec38c04f1e5cde1f268f3701e2f6078a068cf4d 100644 (file)
@@ -1,25 +1,6 @@
-On/Dnia Fri, Nov 17, 2000 at 06:46:52PM +0100, Jan Rekorajski wrote/napisa³(a)
-> > Zapatchowane jajko + glibce 2.1.x == nie dzia³a.
-                                         ^^^^^^^^^^ tu oczywi¶cie o v6 chodzi³o
-                                        
-> To dlaczego glibc 2.1.x dzia³a na kernelu 2.4?
-w jaju 2.2 jest tak:
-       if (addr_len < sizeof(struct sockaddr_in6))
-                       return -EINVAL;
-                       
-w jaju 2.4 jest tak:
-        if (addr_len < SIN6_LEN_RFC2133)
-                       return -EINVAL;
-przy czym: SIN6_LEN_RFC2133==24, a to jest wielko¶æ sockaddr_in6 bez pola
-sin6_scope_id czyli przepu¶ci zarówno stare jak i nowe sockaddr_in6.
-
-Tak wiêc nowy patch, który spowoduje, ¿e ipv6 && jajo 2.2.x bêdzie dzia³a³o
-prawid³o zarówno z glibcami 2.1 jak i 2.2.
-
-
-diff -urN linux-2.2.x.org/include/linux/in6.h linux-2.2.x/include/linux/in6.h
---- linux-2.2.x.org/include/linux/in6.h        Fri Nov 17 18:21:58 2000
-+++ linux-2.2.x/include/linux/in6.h    Fri Nov 17 18:22:26 2000
+diff -urN linux-2.2.17.org/include/linux/in6.h linux-2.2.17/include/linux/in6.h
+--- linux-2.2.17.org/include/linux/in6.h       Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/include/linux/in6.h   Wed Dec  6 18:09:01 2000
 @@ -56,6 +56,7 @@
        __u16                   sin6_port;      /* Transport layer port # */
        __u32                   sin6_flowinfo;  /* IPv6 flow information */
@@ -28,9 +9,9 @@ diff -urN linux-2.2.x.org/include/linux/in6.h linux-2.2.x/include/linux/in6.h
  };
  
  
-diff -urN linux-2.2.x.org/include/net/ipv6.h linux-2.2.x/include/net/ipv6.h
---- linux-2.2.x.org/include/net/ipv6.h Tue May 11 19:36:50 1999
-+++ linux-2.2.x/include/net/ipv6.h     Fri Nov 17 18:55:27 2000
+diff -urN linux-2.2.17.org/include/net/ipv6.h linux-2.2.17/include/net/ipv6.h
+--- linux-2.2.17.org/include/net/ipv6.h        Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/include/net/ipv6.h    Wed Dec  6 18:09:01 2000
 @@ -20,6 +20,8 @@
  #include <net/ndisc.h>
  #include <net/flow.h>
@@ -40,9 +21,9 @@ diff -urN linux-2.2.x.org/include/net/ipv6.h linux-2.2.x/include/net/ipv6.h
  /*
   *    NextHeader field of IPv6 header
   */
-diff -urN linux-2.2.x.org/net/ipv6/af_inet6.c linux-2.2.x/net/ipv6/af_inet6.c
---- linux-2.2.x.org/net/ipv6/af_inet6.c        Thu May  4 02:16:53 2000
-+++ linux-2.2.x/net/ipv6/af_inet6.c    Fri Nov 17 18:56:34 2000
+diff -urN linux-2.2.17.org/net/ipv6/af_inet6.c linux-2.2.17/net/ipv6/af_inet6.c
+--- linux-2.2.17.org/net/ipv6/af_inet6.c       Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/net/ipv6/af_inet6.c   Wed Dec  6 18:09:01 2000
 @@ -199,7 +199,7 @@
                
        /* Check these errors (active socket, bad address length, double bind). */
@@ -52,9 +33,43 @@ diff -urN linux-2.2.x.org/net/ipv6/af_inet6.c linux-2.2.x/net/ipv6/af_inet6.c
            (sk->num != 0))
                return -EINVAL;
                
-diff -urN linux-2.2.x.org/net/ipv6/raw.c linux-2.2.x/net/ipv6/raw.c
---- linux-2.2.x.org/net/ipv6/raw.c     Mon Aug  9 21:04:41 1999
-+++ linux-2.2.x/net/ipv6/raw.c Fri Nov 17 18:57:01 2000
+@@ -334,6 +334,7 @@
+               sin->sin6_port = sk->sport;
+       }
++      sin->sin6_scope_id = 0;
+       *uaddr_len = sizeof(*sin);      
+       return(0);
+ }
+diff -urN linux-2.2.17.org/net/ipv6/datagram.c linux-2.2.17/net/ipv6/datagram.c
+--- linux-2.2.17.org/net/ipv6/datagram.c       Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/net/ipv6/datagram.c   Wed Dec  6 18:10:00 2000
+@@ -133,9 +133,11 @@
+       if (sin) {
+               sin->sin6_family = AF_INET6;
+               sin->sin6_flowinfo = 0;
++              sin->sin6_scope_id = 0;
+               sin->sin6_port = serr->port; 
+               if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) {
+                       memcpy(&sin->sin6_addr, skb->nh.raw + serr->addr_offset, 16);
++                      sin->sin6_scope_id = 0;
+                       if (sk->net_pinfo.af_inet6.sndflow)
+                               sin->sin6_flowinfo = *(u32*)(skb->nh.raw + serr->addr_offset - 24) & IPV6_FLOWINFO_MASK;
+               } else
+@@ -150,8 +152,10 @@
+       if (serr->ee.ee_origin != SO_EE_ORIGIN_LOCAL) {
+               sin->sin6_family = AF_INET6;
+               sin->sin6_flowinfo = 0;
++              sin->sin6_scope_id = 0;
+               if (serr->ee.ee_origin == SO_EE_ORIGIN_ICMP6) {
+                       memcpy(&sin->sin6_addr, &skb->nh.ipv6h->saddr, 16);
++                      sin->sin6_scope_id = 0;
+                       if (sk->net_pinfo.af_inet6.rxopt.all)
+                               datagram_recv_ctl(sk, msg, skb);
+               } else {
+diff -urN linux-2.2.17.org/net/ipv6/raw.c linux-2.2.17/net/ipv6/raw.c
+--- linux-2.2.17.org/net/ipv6/raw.c    Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/net/ipv6/raw.c        Wed Dec  6 18:09:01 2000
 @@ -117,7 +117,7 @@
        int addr_type;
  
@@ -64,7 +79,15 @@ diff -urN linux-2.2.x.org/net/ipv6/raw.c linux-2.2.x/net/ipv6/raw.c
                return -EINVAL;
  
        addr_type = ipv6_addr_type(&addr->sin6_addr);
-@@ -360,7 +360,7 @@
+@@ -252,6 +252,7 @@
+               memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr, 
+                      sizeof(struct in6_addr));
+               sin6->sin6_flowinfo = 0;
++              sin6->sin6_scope_id = 0;
+       }
+       if (sk->net_pinfo.af_inet6.rxopt.all)
+@@ -360,7 +361,7 @@
        fl.fl6_flowlabel = 0;
  
        if (sin6) {
@@ -73,9 +96,9 @@ diff -urN linux-2.2.x.org/net/ipv6/raw.c linux-2.2.x/net/ipv6/raw.c
                        return(-EINVAL);
  
                if (sin6->sin6_family && sin6->sin6_family != AF_INET6) 
-diff -urN linux-2.2.x.org/net/ipv6/tcp_ipv6.c linux-2.2.x/net/ipv6/tcp_ipv6.c
---- linux-2.2.x.org/net/ipv6/tcp_ipv6.c        Thu May  4 02:16:53 2000
-+++ linux-2.2.x/net/ipv6/tcp_ipv6.c    Fri Nov 17 18:57:12 2000
+diff -urN linux-2.2.17.org/net/ipv6/tcp_ipv6.c linux-2.2.17/net/ipv6/tcp_ipv6.c
+--- linux-2.2.17.org/net/ipv6/tcp_ipv6.c       Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/net/ipv6/tcp_ipv6.c   Wed Dec  6 18:09:01 2000
 @@ -387,7 +387,7 @@
        if(!ipv6_addr_any(&np->daddr))
                return -EINVAL;
@@ -85,9 +108,17 @@ diff -urN linux-2.2.x.org/net/ipv6/tcp_ipv6.c linux-2.2.x/net/ipv6/tcp_ipv6.c
                return(-EINVAL);
  
        if (usin->sin6_family && usin->sin6_family != AF_INET6) 
-diff -urN linux-2.2.x.org/net/ipv6/udp.c linux-2.2.x/net/ipv6/udp.c
---- linux-2.2.x.org/net/ipv6/udp.c     Mon Aug  9 21:04:41 1999
-+++ linux-2.2.x/net/ipv6/udp.c Fri Nov 17 18:58:13 2000
+@@ -1583,6 +1583,7 @@
+       sin6->sin6_port = sk->dport;
+       /* We do not store received flowlabel for TCP */
+       sin6->sin6_flowinfo = 0;
++      sin6->sin6_scope_id = 0;
+ }
+ static struct tcp_func ipv6_specific = {
+diff -urN linux-2.2.17.org/net/ipv6/udp.c linux-2.2.17/net/ipv6/udp.c
+--- linux-2.2.17.org/net/ipv6/udp.c    Wed Dec  6 18:06:51 2000
++++ linux-2.2.17/net/ipv6/udp.c        Wed Dec  6 18:14:24 2000
 @@ -210,7 +210,7 @@
                goto ipv4_connected;
        }
@@ -97,7 +128,23 @@ diff -urN linux-2.2.x.org/net/ipv6/udp.c linux-2.2.x/net/ipv6/udp.c
                return(-EINVAL);
  
        if (usin->sin6_family && usin->sin6_family != AF_INET6) 
-@@ -777,7 +777,7 @@
+@@ -414,6 +414,7 @@
+               sin6->sin6_family = AF_INET6;
+               sin6->sin6_port = skb->h.uh->source;
+               sin6->sin6_flowinfo = 0;
++              sin6->sin6_scope_id = 0;
+               if (skb->protocol == __constant_htons(ETH_P_IP)) {
+                       ipv6_addr_set(&sin6->sin6_addr, 0, 0,
+@@ -424,6 +425,7 @@
+                       memcpy(&sin6->sin6_addr, &skb->nh.ipv6h->saddr,
+                              sizeof(struct in6_addr));
++                      sin6->sin6_scope_id = 0;
+                       if (sk->net_pinfo.af_inet6.rxopt.all)
+                               datagram_recv_ctl(sk, msg, skb);
+               }
+@@ -777,7 +779,7 @@
                if (sin6->sin6_family == AF_INET)
                        return udp_sendmsg(sk, msg, ulen);
  
@@ -106,9 +153,3 @@ diff -urN linux-2.2.x.org/net/ipv6/udp.c linux-2.2.x/net/ipv6/udp.c
                        return(-EINVAL);
  
                if (sin6->sin6_family && sin6->sin6_family != AF_INET6)
-
-> Janek
-
--- 
-Arkadiusz Mi¶kiewicz, AM2-6BONE    [ PLD GNU/Linux IPv6 ]
-http://www.t17.ds.pwr.wroc.pl/~misiek/ipv6/   [ enabled ]
This page took 0.141892 seconds and 4 git commands to generate.