--- /dev/null
+From bcac910d069f5c242301fd7ea65167665191f6e8 Mon Sep 17 00:00:00 2001
+From: Wei Yongjun <yjwei@cn.fujitsu.com>
+Date: Thu, 31 Jul 2008 20:46:47 -0700
+Subject: ipv6: Fix ip6_xmit to send fragments if ipfragok is true
+Message-Id: <20080805.164947.158498047.davem@davemloft.net>
+
+From: Wei Yongjun <yjwei@cn.fujitsu.com>
+
+[ Upstream commit 77e2f14f71d68d05945f1d30ca55b5194d6ab1ce ]
+
+SCTP used ip6_xmit() to send fragments after received ICMP packet too
+big message. But while send packet used ip6_xmit, the skb->local_df is
+not initialized. So when skb if enter ip6_fragment(), the following
+code will discard the skb.
+
+ip6_fragment(...)
+{
+ if (!skb->local_df) {
+ ...
+ return -EMSGSIZE;
+ }
+ ...
+}
+
+SCTP do the following step:
+1. send packet ip6_xmit(skb, ipfragok=0)
+2. received ICMP packet too big message
+3. if PMTUD_ENABLE: ip6_xmit(skb, ipfragok=1)
+
+This patch fixed the problem by set local_df if ipfragok is true.
+
+Signed-off-by: Wei Yongjun <yjwei@cn.fujitsu.com>
+Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv6/ip6_output.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/net/ipv6/ip6_output.c
++++ b/net/ipv6/ip6_output.c
+@@ -231,6 +231,10 @@ int ip6_xmit(struct sock *sk, struct sk_
+ skb_reset_network_header(skb);
+ hdr = ipv6_hdr(skb);
+
++ /* Allow local fragmentation. */
++ if (ipfragok)
++ skb->local_df = 1;
++
+ /*
+ * Fill in the IPv6 header
+ */
--- /dev/null
+From 7d5b66670742520208a79e99766f91d4835827fa Mon Sep 17 00:00:00 2001
+From: Stephen Hemminger <shemminger@vyatta.com>
+Date: Wed, 30 Jul 2008 16:29:19 -0700
+Subject: random32: seeding improvement
+Message-Id: <20080805.164947.158498047.davem@davemloft.net>
+
+From: Stephen Hemminger <shemminger@vyatta.com>
+
+[ Upstream commit 697f8d0348a652593d195a13dd1067d9df911a82 ]
+
+The rationale is:
+ * use u32 consistently
+ * no need to do LCG on values from (better) get_random_bytes
+ * use more data from get_random_bytes for secondary seeding
+ * don't reduce state space on srandom32()
+ * enforce state variable initialization restrictions
+
+Note: the second paper has a version of random32() with even longer period
+and a version of random64() if needed.
+
+Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Cc: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ lib/random32.c | 48 +++++++++++++++++++++++++++---------------------
+ 1 file changed, 27 insertions(+), 21 deletions(-)
+
+--- a/lib/random32.c
++++ b/lib/random32.c
+@@ -56,23 +56,12 @@ static u32 __random32(struct rnd_state *
+ return (state->s1 ^ state->s2 ^ state->s3);
+ }
+
+-static void __set_random32(struct rnd_state *state, unsigned long s)
++/*
++ * Handle minimum values for seeds
++ */
++static inline u32 __seed(u32 x, u32 m)
+ {
+- if (s == 0)
+- s = 1; /* default seed is 1 */
+-
+-#define LCG(n) (69069 * n)
+- state->s1 = LCG(s);
+- state->s2 = LCG(state->s1);
+- state->s3 = LCG(state->s2);
+-
+- /* "warm it up" */
+- __random32(state);
+- __random32(state);
+- __random32(state);
+- __random32(state);
+- __random32(state);
+- __random32(state);
++ return (x < m) ? x + m : x;
+ }
+
+ /**
+@@ -107,7 +96,7 @@ void srandom32(u32 entropy)
+ */
+ for_each_possible_cpu (i) {
+ struct rnd_state *state = &per_cpu(net_rand_state, i);
+- __set_random32(state, state->s1 ^ entropy);
++ state->s1 = __seed(state->s1 ^ entropy, 1);
+ }
+ }
+ EXPORT_SYMBOL(srandom32);
+@@ -122,7 +111,19 @@ static int __init random32_init(void)
+
+ for_each_possible_cpu(i) {
+ struct rnd_state *state = &per_cpu(net_rand_state,i);
+- __set_random32(state, i + jiffies);
++
++#define LCG(x) ((x) * 69069) /* super-duper LCG */
++ state->s1 = __seed(LCG(i + jiffies), 1);
++ state->s2 = __seed(LCG(state->s1), 7);
++ state->s3 = __seed(LCG(state->s2), 15);
++
++ /* "warm it up" */
++ __random32(state);
++ __random32(state);
++ __random32(state);
++ __random32(state);
++ __random32(state);
++ __random32(state);
+ }
+ return 0;
+ }
+@@ -135,13 +136,18 @@ core_initcall(random32_init);
+ static int __init random32_reseed(void)
+ {
+ int i;
+- unsigned long seed;
+
+ for_each_possible_cpu(i) {
+ struct rnd_state *state = &per_cpu(net_rand_state,i);
++ u32 seeds[3];
++
++ get_random_bytes(&seeds, sizeof(seeds));
++ state->s1 = __seed(seeds[0], 1);
++ state->s2 = __seed(seeds[1], 7);
++ state->s3 = __seed(seeds[2], 15);
+
+- get_random_bytes(&seed, sizeof(seed));
+- __set_random32(state, seed);
++ /* mix it in */
++ __random32(state);
+ }
+ return 0;
+ }
cifs-mount-of-ipc-breaks-with-iget-patch.patch
cifs-if-get-root-inode-fails-during-mount-cleanup-tree-connection.patch
dccp-change-l-r-must-have-at-least-one-byte-in-the-dccpsf_val-field.patch
+syncookies-make-sure-ecn-is-disabled.patch
+random32-seeding-improvement.patch
+ipv6-fix-ip6_xmit-to-send-fragments-if-ipfragok-is-true.patch
--- /dev/null
+From d1ad459db7eafccbc12418aac875826c0a1d2612 Mon Sep 17 00:00:00 2001
+From: Florian Westphal <fw@strlen.de>
+Date: Sat, 26 Jul 2008 02:21:54 -0700
+Subject: syncookies: Make sure ECN is disabled
+Message-Id: <20080805.164947.158498047.davem@davemloft.net>
+
+From: Florian Westphal <fw@strlen.de>
+
+[ Upstream commit 16df845f4566bc252f3e09db12f5c2f22cb44226 ]
+
+ecn_ok is not initialized when a connection is established by cookies.
+The cookie syn-ack never sets ECN, so ecn_ok must be set to 0.
+
+Spotted using ns-3/network simulation cradle simulator and valgrind.
+
+Signed-off-by: Florian Westphal <fw@strlen.de>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+---
+ net/ipv4/syncookies.c | 1 +
+ net/ipv6/syncookies.c | 1 +
+ 2 files changed, 2 insertions(+)
+
+--- a/net/ipv4/syncookies.c
++++ b/net/ipv4/syncookies.c
+@@ -301,6 +301,7 @@ struct sock *cookie_v4_check(struct sock
+ ireq->rmt_port = th->source;
+ ireq->loc_addr = ip_hdr(skb)->daddr;
+ ireq->rmt_addr = ip_hdr(skb)->saddr;
++ ireq->ecn_ok = 0;
+ ireq->snd_wscale = tcp_opt.snd_wscale;
+ ireq->rcv_wscale = tcp_opt.rcv_wscale;
+ ireq->sack_ok = tcp_opt.sack_ok;
+--- a/net/ipv6/syncookies.c
++++ b/net/ipv6/syncookies.c
+@@ -223,6 +223,7 @@ struct sock *cookie_v6_check(struct sock
+
+ req->expires = 0UL;
+ req->retrans = 0;
++ ireq->ecn_ok = 0;
+ ireq->snd_wscale = tcp_opt.snd_wscale;
+ ireq->rcv_wscale = tcp_opt.rcv_wscale;
+ ireq->sack_ok = tcp_opt.sack_ok;