From: Greg Kroah-Hartman Date: Tue, 5 Aug 2014 18:29:17 +0000 (-0700) Subject: 3.4-stable patches X-Git-Tag: v3.4.102~3 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=243ae6177f2ccb8ad60d452ae9042f25e06891ab;p=thirdparty%2Fkernel%2Fstable-queue.git 3.4-stable patches added patches: ipv6-reallocate-addrconf-router-for-ipv6-address-when-lo-device-up.patch mm-try_to_unmap_cluster-should-lock_page-before-mlocking.patch --- diff --git a/queue-3.4/ipv6-reallocate-addrconf-router-for-ipv6-address-when-lo-device-up.patch b/queue-3.4/ipv6-reallocate-addrconf-router-for-ipv6-address-when-lo-device-up.patch new file mode 100644 index 00000000000..1ca22cb2c9e --- /dev/null +++ b/queue-3.4/ipv6-reallocate-addrconf-router-for-ipv6-address-when-lo-device-up.patch @@ -0,0 +1,66 @@ +From 33d99113b1102c2d2f8603b9ba72d89d915c13f5 Mon Sep 17 00:00:00 2001 +From: Gao feng +Date: Fri, 24 Jan 2014 16:29:11 +0800 +Subject: ipv6: reallocate addrconf router for ipv6 address when lo device up + +From: Gao feng + +commit 33d99113b1102c2d2f8603b9ba72d89d915c13f5 upstream. + +commit 25fb6ca4ed9cad72f14f61629b68dc03c0d9713f +"net IPv6 : Fix broken IPv6 routing table after loopback down-up" +allocates addrconf router for ipv6 address when lo device up. +but commit a881ae1f625c599b460cc8f8a7fcb1c438f699ad +"ipv6:don't call addrconf_dst_alloc again when enable lo" breaks +this behavior. + +Since the addrconf router is moved to the garbage list when +lo device down, we should release this router and rellocate +a new one for ipv6 address when lo device up. + +This patch solves bug 67951 on bugzilla +https://bugzilla.kernel.org/show_bug.cgi?id=67951 + +change from v1: +use ip6_rt_put to repleace ip6_del_rt, thanks Hannes! +change code style, suggested by Sergei. + +CC: Sabrina Dubroca +CC: Hannes Frederic Sowa +Reported-by: Weilong Chen +Signed-off-by: Weilong Chen +Signed-off-by: Gao feng +Acked-by: Hannes Frederic Sowa +Signed-off-by: David S. Miller +[weilong: s/ip6_rt_put/dst_release] +Signed-off-by: Chen Weilong +Signed-off-by: Li Zefan +Signed-off-by: Greg Kroah-Hartman + +--- + net/ipv6/addrconf.c | 14 ++++++++++++-- + 1 file changed, 12 insertions(+), 2 deletions(-) + +--- a/net/ipv6/addrconf.c ++++ b/net/ipv6/addrconf.c +@@ -2438,8 +2438,18 @@ static void init_loopback(struct net_dev + if (sp_ifa->flags & (IFA_F_DADFAILED | IFA_F_TENTATIVE)) + continue; + +- if (sp_ifa->rt) +- continue; ++ if (sp_ifa->rt) { ++ /* This dst has been added to garbage list when ++ * lo device down, release this obsolete dst and ++ * reallocate a new router for ifa. ++ */ ++ if (sp_ifa->rt->dst.obsolete > 0) { ++ dst_release(sp_ifa->rt); ++ sp_ifa->rt = NULL; ++ } else { ++ continue; ++ } ++ } + + sp_rt = addrconf_dst_alloc(idev, &sp_ifa->addr, 0); + diff --git a/queue-3.4/mm-try_to_unmap_cluster-should-lock_page-before-mlocking.patch b/queue-3.4/mm-try_to_unmap_cluster-should-lock_page-before-mlocking.patch new file mode 100644 index 00000000000..ac88298a99d --- /dev/null +++ b/queue-3.4/mm-try_to_unmap_cluster-should-lock_page-before-mlocking.patch @@ -0,0 +1,93 @@ +From 8e8836abf74a0b227c651cf76466b8d711470a76 Mon Sep 17 00:00:00 2001 +From: Vlastimil Babka +Date: Mon, 7 Apr 2014 15:37:50 -0700 +Subject: mm: try_to_unmap_cluster() should lock_page() before mlocking + +From: Vlastimil Babka + +commit 57e68e9cd65b4b8eb4045a1e0d0746458502554c upstream. + +A BUG_ON(!PageLocked) was triggered in mlock_vma_page() by Sasha Levin +fuzzing with trinity. The call site try_to_unmap_cluster() does not lock +the pages other than its check_page parameter (which is already locked). + +The BUG_ON in mlock_vma_page() is not documented and its purpose is +somewhat unclear, but apparently it serializes against page migration, +which could otherwise fail to transfer the PG_mlocked flag. This would +not be fatal, as the page would be eventually encountered again, but +NR_MLOCK accounting would become distorted nevertheless. This patch adds +a comment to the BUG_ON in mlock_vma_page() and munlock_vma_page() to that +effect. + +The call site try_to_unmap_cluster() is fixed so that for page != +check_page, trylock_page() is attempted (to avoid possible deadlocks as we +already have check_page locked) and mlock_vma_page() is performed only +upon success. If the page lock cannot be obtained, the page is left +without PG_mlocked, which is again not a problem in the whole unevictable +memory design. + +Signed-off-by: Vlastimil Babka +Signed-off-by: Bob Liu +Reported-by: Sasha Levin +Cc: Wanpeng Li +Cc: Michel Lespinasse +Cc: KOSAKI Motohiro +Acked-by: Rik van Riel +Cc: David Rientjes +Cc: Mel Gorman +Cc: Hugh Dickins +Cc: Joonsoo Kim +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +[bwh: Backported to 3.2: adjust context] +Signed-off-by: Ben Hutchings +Cc: Yijing Wang +Signed-off-by: Greg Kroah-Hartman + +--- + mm/mlock.c | 2 ++ + mm/rmap.c | 14 ++++++++++++-- + 2 files changed, 14 insertions(+), 2 deletions(-) + +--- a/mm/mlock.c ++++ b/mm/mlock.c +@@ -78,6 +78,7 @@ void __clear_page_mlock(struct page *pag + */ + void mlock_vma_page(struct page *page) + { ++ /* Serialize with page migration */ + BUG_ON(!PageLocked(page)); + + if (!TestSetPageMlocked(page)) { +@@ -105,6 +106,7 @@ void mlock_vma_page(struct page *page) + */ + void munlock_vma_page(struct page *page) + { ++ /* For try_to_munlock() and to serialize with page migration */ + BUG_ON(!PageLocked(page)); + + if (TestClearPageMlocked(page)) { +--- a/mm/rmap.c ++++ b/mm/rmap.c +@@ -1449,9 +1449,19 @@ static int try_to_unmap_cluster(unsigned + BUG_ON(!page || PageAnon(page)); + + if (locked_vma) { +- mlock_vma_page(page); /* no-op if already mlocked */ +- if (page == check_page) ++ if (page == check_page) { ++ /* we know we have check_page locked */ ++ mlock_vma_page(page); + ret = SWAP_MLOCK; ++ } else if (trylock_page(page)) { ++ /* ++ * If we can lock the page, perform mlock. ++ * Otherwise leave the page alone, it will be ++ * eventually encountered again later. ++ */ ++ mlock_vma_page(page); ++ unlock_page(page); ++ } + continue; /* don't unmap */ + } + diff --git a/queue-3.4/series b/queue-3.4/series index adf9ef43d7a..fbe60319578 100644 --- a/queue-3.4/series +++ b/queue-3.4/series @@ -15,3 +15,5 @@ revert-net-ip-ipv6-handle-gso-skbs-in-forwarding-path.patch net-l2tp-don-t-fall-back-on-udp-sockopt.patch lib-btree.c-fix-leak-of-whole-btree-nodes.patch x86-espfix-xen-fix-allocation-of-pages-for-paravirt-page-tables.patch +mm-try_to_unmap_cluster-should-lock_page-before-mlocking.patch +ipv6-reallocate-addrconf-router-for-ipv6-address-when-lo-device-up.patch