diff options
author | Arkadiusz MiĆkiewicz | 2009-11-01 15:18:22 (GMT) |
---|---|---|
committer | cvs2git | 2012-06-24 12:13:13 (GMT) |
commit | 9c1e352b1149721b752252716447bcf5fc578d85 (patch) | |
tree | bbaa5b85de5d3e277a6599b6c1277be09ae13dfc | |
parent | 06102837f411b152c33aa415d4866bdad23091ea (diff) | |
download | kernel-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.spec | 7 | ||||
-rw-r--r-- | vserver-2.6.31.5-vs2.3.0.36.21-ipv6-fix02.diff | 82 |
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) |