summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArkadiusz Miƛkiewicz2009-11-01 15:18:22 (GMT)
committercvs2git2012-06-24 12:13:13 (GMT)
commit9c1e352b1149721b752252716447bcf5fc578d85 (patch)
treebbaa5b85de5d3e277a6599b6c1277be09ae13dfc
parent06102837f411b152c33aa415d4866bdad23091ea (diff)
downloadkernel-9c1e352b1149721b752252716447bcf5fc578d85.zip
kernel-9c1e352b1149721b752252716447bcf5fc578d85.tar.gz
- rel 1; ipv6 issue seems to be finally fixedauto/th/kernel-2_6_31_5-1
Changed files: kernel.spec -> 1.721 vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff -> 1.1
-rw-r--r--kernel.spec7
-rw-r--r--vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff82
2 files changed, 87 insertions, 2 deletions
diff --git a/kernel.spec b/kernel.spec
index 1341038..0c3cab7 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -112,7 +112,7 @@
%define basever 2.6.31
%define postver .5
-%define rel 0.3
+%define rel 1
%define _enable_debug_packages 0
@@ -277,6 +277,8 @@ Patch90: kernel-mpt-fusion.patch
# based on http://vserver.13thfloor.at/Experimental/patch-2.6.31.5-vs2.3.0.36.21.diff
Patch100: kernel-vserver-2.3.patch
Patch101: kernel-vserver-fixes.patch
+# http://people.linux-vserver.org/~bonbons/patches/vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff
+Patch102: vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff
# Wake-On-Lan fix for nForce drivers; using http://atlas.et.tudelft.nl/verwei90/nforce2/wol.html
# Fix verified for that kernel version.
@@ -821,6 +823,7 @@ install %{SOURCE5} Makefile.ppclibs
%if %{with vserver}
%patch100 -p1
%patch101 -p1
+%patch102 -p4
%endif
# forcedeth
@@ -1499,7 +1502,7 @@ fi
%files doc
%defattr(644,root,root,755)
-%{_kernelsrcdir}/Documentation
+%{_docdir}/%{name}-%{version}
%if %{with source}
%files source -f aux_files_exc
diff --git a/vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff b/vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff
new file mode 100644
index 0000000..e3cb6a5
--- /dev/null
+++ b/vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff
@@ -0,0 +1,82 @@
+diff -NurpP /usr/src/linux-2.6.31.5-vs2.3.0.36.21.orig/net/ipv6/udp.c /usr/src/linux-2.6.31.5-vs2.3.0.36.21/net/ipv6/udp.c
+--- /usr/src/linux-2.6.31.5-vs2.3.0.36.21.orig/net/ipv6/udp.c 2009-11-01 14:32:37.092311264 +0100
++++ /usr/src/linux-2.6.31.5-vs2.3.0.36.21/net/ipv6/udp.c 2009-11-01 15:05:42.886773802 +0100
+@@ -61,41 +61,48 @@ 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 (sk2_ipv6only && !sk2_rcv_saddr6)
+- addr_type2 = IPV6_ADDR_ANY;
+-
+- /* 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);
++ /* if both are mapped, treat as IPv4 */
++ if (addr_type == IPV6_ADDR_MAPPED && addr_type2 == IPV6_ADDR_MAPPED)
++ if (!sk2_ipv6only &&
++ (!sk_rcv_saddr || !sk2_rcv_saddr ||
++ sk_rcv_saddr == sk2_rcv_saddr))
++ goto vs_v4;
+ else
+- return (sk_rcv_saddr == sk2_rcv_saddr);
+- }
++ return 0;
+
+- if (!sk2_rcv_saddr6)
+- addr_type2 = IPV6_ADDR_ANY;
+-
+- /* 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);
++ if (addr_type2 == IPV6_ADDR_ANY &&
++ !(sk2_ipv6only && addr_type == IPV6_ADDR_MAPPED))
++ goto vs;
++
++ if (addr_type == IPV6_ADDR_ANY &&
++ !(sk_ipv6only && addr_type2 == IPV6_ADDR_MAPPED))
++ goto vs;
++
++ if (sk2_rcv_saddr6 &&
++ ipv6_addr_equal(sk_rcv_saddr6, sk2_rcv_saddr6))
++ goto vs;
+
+- if (addr_type == IPV6_ADDR_ANY)
+- return v6_addr_in_nx_info(sk->sk_nx_info,
+- sk2_rcv_saddr6 ? sk2_rcv_saddr6 : &in6addr_any, -1);
++ return 0;
+
+- if (addr_type2 == IPV6_ADDR_ANY)
++vs_v4:
++ if (!sk_rcv_saddr && !sk2_rcv_saddr)
++ return nx_v4_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
++ if (!sk2_rcv_saddr)
++ return v4_addr_in_nx_info(sk->sk_nx_info, sk2_rcv_saddr, -1);
++ if (!sk_rcv_saddr)
++ return v4_addr_in_nx_info(sk2->sk_nx_info, sk_rcv_saddr, -1);
++ return 1;
++vs:
++ if (addr_type2 == IPV6_ADDR_ANY && addr_type == IPV6_ADDR_ANY)
++ return nx_v6_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
++ else 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);
++ else if (addr_type == IPV6_ADDR_ANY)
++ if (addr_type2 == IPV6_ADDR_MAPPED)
++ return nx_v4_addr_conflict(sk->sk_nx_info, sk2->sk_nx_info);
++ else
++ return v6_addr_in_nx_info(sk->sk_nx_info, sk2_rcv_saddr6, -1);
++ return 1;
+ }
+
+ int udp_v6_get_port(struct sock *sk, unsigned short snum)