]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Nov 2017 10:14:24 +0000 (11:14 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 24 Nov 2017 10:14:24 +0000 (11:14 +0100)
added patches:
mm-hwpoison-fixup-mm-check-the-return-value-of-lookup_page_ext-for-all-call-sites.patch

queue-4.4/mm-hwpoison-fixup-mm-check-the-return-value-of-lookup_page_ext-for-all-call-sites.patch [new file with mode: 0644]
queue-4.4/series [new file with mode: 0644]

diff --git a/queue-4.4/mm-hwpoison-fixup-mm-check-the-return-value-of-lookup_page_ext-for-all-call-sites.patch b/queue-4.4/mm-hwpoison-fixup-mm-check-the-return-value-of-lookup_page_ext-for-all-call-sites.patch
new file mode 100644 (file)
index 0000000..ca8173e
--- /dev/null
@@ -0,0 +1,53 @@
+From foo@baz Fri Nov 24 11:13:07 CET 2017
+Date: Fri, 24 Nov 2017 11:13:07 +0100
+To: Greg KH <gregkh@linuxfoundation.org>
+From: Michal Hocko <mhocko@suse.com>
+Subject: mm, hwpoison: fixup "mm: check the return value of lookup_page_ext for all call sites"
+
+From: Michal Hocko <mhocko@suse.com>
+
+
+Backport of the upstream commit f86e4271978b ("mm: check the return
+value of lookup_page_ext for all call sites") is wrong for hwpoison
+pages. I have accidentally negated the condition for bailout. This
+basically disables hwpoison pages tracking while the code still
+might crash on unusual configurations when struct pages do not have
+page_ext allocated. The fix is trivial to invert the condition.
+
+Reported-by: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Michal Hocko <mhocko@suse.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/debug-pagealloc.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/mm/debug-pagealloc.c
++++ b/mm/debug-pagealloc.c
+@@ -34,7 +34,7 @@ static inline void set_page_poison(struc
+       struct page_ext *page_ext;
+       page_ext = lookup_page_ext(page);
+-      if (page_ext)
++      if (!page_ext)
+               return;
+       __set_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+ }
+@@ -44,7 +44,7 @@ static inline void clear_page_poison(str
+       struct page_ext *page_ext;
+       page_ext = lookup_page_ext(page);
+-      if (page_ext)
++      if (!page_ext)
+               return;
+       __clear_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+ }
+@@ -54,7 +54,7 @@ static inline bool page_poison(struct pa
+       struct page_ext *page_ext;
+       page_ext = lookup_page_ext(page);
+-      if (page_ext)
++      if (!page_ext)
+               return false;
+       return test_bit(PAGE_EXT_DEBUG_POISON, &page_ext->flags);
+ }
diff --git a/queue-4.4/series b/queue-4.4/series
new file mode 100644 (file)
index 0000000..c404cbb
--- /dev/null
@@ -0,0 +1 @@
+mm-hwpoison-fixup-mm-check-the-return-value-of-lookup_page_ext-for-all-call-sites.patch