packages: kernel/kernel-vserver-2.3.patch, kernel/kernel.spec - rel 0.2; ad...

arekm arekm at pld-linux.org
Sat Aug 22 16:46:32 CEST 2009


Author: arekm                        Date: Sat Aug 22 14:46:32 2009 GMT
Module: packages                      Tag: HEAD
---- Log message:
- rel 0.2; addr selection fixes

---- Files affected:
packages/kernel:
   kernel-vserver-2.3.patch (1.14 -> 1.15) , kernel.spec (1.695 -> 1.696) 

---- Diffs:

================================================================
Index: packages/kernel/kernel-vserver-2.3.patch
diff -u packages/kernel/kernel-vserver-2.3.patch:1.14 packages/kernel/kernel-vserver-2.3.patch:1.15
--- packages/kernel/kernel-vserver-2.3.patch:1.14	Wed Aug 19 14:30:08 2009
+++ packages/kernel/kernel-vserver-2.3.patch	Sat Aug 22 16:46:26 2009
@@ -26924,3 +26924,83 @@
  #include <linux/parser.h>
  #include <linux/nfs_mount.h>
  #include <net/ipv6.h>
+--- linux-2.6.30.5-vs2.3.0.36.14-pre5.orig/net/ipv6/af_inet6.c	2009-08-22 00:44:21.295614269 +0200
++++ linux-2.6.30.5-vs2.3.0.36.14-pre5/net/ipv6/af_inet6.c	2009-08-22 01:26:24.711662351 +0200
+@@ -306,8 +306,14 @@ int inet6_bind(struct socket *sock, stru
+ 		    v4addr != htonl(INADDR_ANY) &&
+ 		    chk_addr_ret != RTN_LOCAL &&
+ 		    chk_addr_ret != RTN_MULTICAST &&
+-		    chk_addr_ret != RTN_BROADCAST)
++		    chk_addr_ret != RTN_BROADCAST) {
++			err = -EADDRNOTAVAIL;
+ 			goto out;
++		}
++		if (!v4_addr_in_nx_info(sk->sk_nx_info, v4addr, NXA_MASK_BIND)) {
++			err = -EADDRNOTAVAIL;
++			goto out;
++		}
+ 	} else {
+ 		if (addr_type != IPV6_ADDR_ANY) {
+ 			struct net_device *dev = NULL;
+--- linux-2.6.30.5-vs2.3.0.36.14-pre5.orig/net/ipv6/udp.c	2009-08-21 22:38:58.139614225 +0200
++++ linux-2.6.30.5-vs2.3.0.36.14-pre5/net/ipv6/udp.c	2009-08-22 00:39:40.947661415 +0200
+@@ -61,25 +61,44 @@ int ipv6_rcv_saddr_equal(const struct so
+ 	int addr_type = ipv6_addr_type(sk_rcv_saddr6);
+ 	int addr_type2 = sk2_rcv_saddr6 ? ipv6_addr_type(sk2_rcv_saddr6) : IPV6_ADDR_MAPPED;
+ 
+-	/* if both are mapped, treat as IPv4 */
+-	if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED)
+-		return (!sk2_ipv6only &&
+-			(!sk_rcv_saddr || !sk2_rcv_saddr ||
+-			  sk_rcv_saddr == sk2_rcv_saddr));
++	if (sk2_ipv6only && !sk2_rcv_saddr6)
++		addr_type2 = IPV6_ADDR_ANY;
+ 
+-	if (addr_type2 == IPV6_ADDR_ANY &&
+-	    !(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED))
+-		return 1;
++	/* if both are mapped or any, treat as IPv4 */
++	if ((addr_type == IPV6_ADDR_MAPPED || (addr_type == IPV6_ADDR_ANY && !sk_ipv6only)) &&
++	    (addr_type2 == IPV6_ADDR_MAPPED || (addr_type2 == IPV6_ADDR_ANY && !sk2_ipv6only))) {
++		if (!sk_rcv_saddr && !sk2_rcv_saddr) {
++			if (nx_v4_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info))
++				return 1;
++			else if (addr_type != IPV6_ADDR_ANY && sk2_rcv_saddr6)
++				return 0;
++			/* remaining cases are at least one ANY */
++		} else if (!sk_rcv_saddr)
++			return v4_addr_in_nx_info(sk->sk_nx_info, sk2_rcv_saddr, -1);
++		else if (!sk2_rcv_saddr)
++			return v4_addr_in_nx_info(sk2->sk_nx_info, sk_rcv_saddr, -1);
++		else
++			return (sk_rcv_saddr == sk2_rcv_saddr);
++	}
+ 
+-	if (addr_type == IPV6_ADDR_ANY &&
+-	    !(sk_ipv6only && addr_type2 == IPV6_ADDR_MAPPED))
+-		return 1;
++	if (!sk2_rcv_saddr6)
++		addr_type2 = IPV6_ADDR_ANY;
+ 
+-	if (sk2_rcv_saddr6 &&
+-	    ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
+-		return 1;
++	/* both are IPv6 */
++	if (addr_type == IPV6_ADDR_ANY && addr_type2 == IPV6_ADDR_ANY)
++		return nx_v6_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
+ 
+-	return 0;
++	if (addr_type == IPV6_ADDR_ANY) {
++		const struct in6_addr in6_any = {
++			.s6_addr32 = { 0, 0, 0, 0}
++		};
++		return v6_addr_in_nx_info(sk->sk_nx_info, sk2_rcv_saddr6 ? sk2_rcv_saddr6 : &in6_any, -1);
++	}
++
++	if (addr_type2 == IPV6_ADDR_ANY)
++		return v6_addr_in_nx_info(sk2->sk_nx_info, sk_rcv_saddr6, -1);
++
++	return ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6);
+ }
+ 
+ int udp_v6_get_port(struct sock *sk, unsigned short snum)

================================================================
Index: packages/kernel/kernel.spec
diff -u packages/kernel/kernel.spec:1.695 packages/kernel/kernel.spec:1.696
--- packages/kernel/kernel.spec:1.695	Thu Aug 20 20:09:26 2009
+++ packages/kernel/kernel.spec	Sat Aug 22 16:46:26 2009
@@ -114,7 +114,7 @@
 
 %define		basever		2.6.30
 %define		postver		.5
-%define		rel		0.1
+%define		rel		0.2
 
 %define		_enable_debug_packages			0
 
@@ -1578,6 +1578,9 @@
 All persons listed below can be reached at <cvs_login>@pld-linux.org
 
 $Log$
+Revision 1.696  2009/08/22 14:46:26  arekm
+- rel 0.2; addr selection fixes
+
 Revision 1.695  2009/08/20 18:09:26  arekm
 - make verbose work again
 
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel-vserver-2.3.patch?r1=1.14&r2=1.15&f=u
    http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/packages/kernel/kernel.spec?r1=1.695&r2=1.696&f=u



More information about the pld-cvs-commit mailing list