diff options
author | Natanael Copa <ncopa@alpinelinux.org> | 2011-12-19 13:41:41 +0100 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2011-12-19 13:52:20 +0100 |
commit | c5d59580c308763d163d2bfb374b796ae68a3748 (patch) | |
tree | 3ce80d188b977f297f53240bec2495e2cdc86c1a /main/linux-grsec/linux-3.0.x-regression-with-ipv4-routes-having-mtu.patch | |
parent | 1d14f37cea33666974d6adf5d93daba1542bf7f5 (diff) | |
download | aports-c5d59580c308763d163d2bfb374b796ae68a3748.tar.bz2 aports-c5d59580c308763d163d2bfb374b796ae68a3748.tar.xz |
main/linux-grsec: fix mtu regression and fix via cpu support
Diffstat (limited to 'main/linux-grsec/linux-3.0.x-regression-with-ipv4-routes-having-mtu.patch')
-rw-r--r-- | main/linux-grsec/linux-3.0.x-regression-with-ipv4-routes-having-mtu.patch | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/main/linux-grsec/linux-3.0.x-regression-with-ipv4-routes-having-mtu.patch b/main/linux-grsec/linux-3.0.x-regression-with-ipv4-routes-having-mtu.patch new file mode 100644 index 0000000000..7ca4147826 --- /dev/null +++ b/main/linux-grsec/linux-3.0.x-regression-with-ipv4-routes-having-mtu.patch @@ -0,0 +1,53 @@ +diff --git a/net/ipv4/route.c b/net/ipv4/route.c +index f30112f..26a6249 100644 +--- a/net/ipv4/route.c ++++ b/net/ipv4/route.c +@@ -1841,6 +1841,22 @@ static unsigned int ipv4_mtu(const struct dst_entry *dst) + return mtu; + } + ++static void __rt_init_metrics(struct rtable *rt, struct fib_info *fi, ++ struct inet_peer *peer) ++{ ++ if (peer && fi->fib_metrics == (u32 *) dst_default_metrics) { ++ dst_init_metrics(&rt->dst, peer->metrics, false); ++ return; ++ } ++ ++ if (fi->fib_metrics != (u32 *) dst_default_metrics) { ++ rt->fi = fi; ++ atomic_inc(&fi->fib_clntref); ++ } ++ ++ dst_init_metrics(&rt->dst, fi->fib_metrics, true); ++} ++ + static void rt_init_metrics(struct rtable *rt, const struct flowi4 *fl4, + struct fib_info *fi) + { +@@ -1859,7 +1875,8 @@ static void rt_init_metrics(struct rtable *rt, const struct flowi4 *fl4, + if (inet_metrics_new(peer)) + memcpy(peer->metrics, fi->fib_metrics, + sizeof(u32) * RTAX_MAX); +- dst_init_metrics(&rt->dst, peer->metrics, false); ++ ++ __rt_init_metrics(rt, fi, peer); + + check_peer_pmtu(&rt->dst, peer); + if (peer->redirect_genid != redirect_genid) +@@ -1869,13 +1886,8 @@ static void rt_init_metrics(struct rtable *rt, const struct flowi4 *fl4, + rt->rt_gateway = peer->redirect_learned.a4; + rt->rt_flags |= RTCF_REDIRECTED; + } +- } else { +- if (fi->fib_metrics != (u32 *) dst_default_metrics) { +- rt->fi = fi; +- atomic_inc(&fi->fib_clntref); +- } +- dst_init_metrics(&rt->dst, fi->fib_metrics, true); +- } ++ } else ++ __rt_init_metrics(rt, fi, NULL); + } + + static void rt_set_nexthop(struct rtable *rt, const struct flowi4 *fl4, |