Mel Gorman 23be7468e8 hugetlb: fix infinite loop in get_futex_key() when backed by huge pages
If a futex key happens to be located within a huge page mapped
MAP_PRIVATE, get_futex_key() can go into an infinite loop waiting for a
page->mapping that will never exist.

See https://bugzilla.redhat.com/show_bug.cgi?id=552257 for more details
about the problem.

This patch makes page->mapping a poisoned value that includes
PAGE_MAPPING_ANON mapped MAP_PRIVATE.  This is enough for futex to
continue but because of PAGE_MAPPING_ANON, the poisoned value is not
dereferenced or used by futex.  No other part of the VM should be
dereferencing the page->mapping of a hugetlbfs page as its page cache is
not on the LRU.

This patch fixes the problem with the test case described in the bugzilla.

[akpm@linux-foundation.org: mel cant spel]
Signed-off-by: Mel Gorman <mel@csn.ul.ie>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Acked-by: Darren Hart <darren@dvhart.com>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2010-04-24 11:31:25 -07:00
..
2009-10-27 16:47:55 -04:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2010-03-12 15:53:10 -08:00
2009-12-16 07:20:13 -08:00
2009-11-20 20:13:39 +01:00
2009-11-20 20:13:39 +01:00
2009-11-20 20:13:39 +01:00
2010-03-12 15:52:32 -08:00
2010-02-05 07:35:05 -08:00
2009-12-10 23:52:01 +00:00
2009-11-04 09:50:58 -08:00
2009-10-01 21:17:49 +02:00
2009-12-15 08:53:33 -08:00
2009-11-04 09:50:58 -08:00
2009-12-23 13:33:54 +01:00
2009-11-04 09:50:58 -08:00
2010-04-23 10:39:48 -07:00
2009-11-04 09:50:58 -08:00
2010-03-16 08:55:32 +01:00
2010-02-09 11:13:56 +01:00
2009-12-14 23:55:34 +01:00
2010-03-07 22:17:09 +01:00
2010-03-02 12:23:42 +01:00
2010-03-02 12:23:49 +01:00
2010-04-01 01:31:13 -07:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2010-02-18 14:08:38 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2010-02-17 16:35:17 -08:00
2010-02-02 07:32:29 -08:00
2010-01-11 16:28:01 -08:00
2010-03-12 15:52:40 -08:00
2010-03-12 15:52:36 -08:00
2009-11-04 09:50:58 -08:00
2010-03-12 15:52:40 -08:00
2009-10-18 18:52:53 -07:00
2010-03-12 15:53:10 -08:00
2009-12-16 06:56:12 -08:00
2010-04-06 10:55:33 -04:00
2009-12-15 08:53:36 -08:00
2009-12-26 20:40:34 -08:00
2010-02-03 17:39:50 +11:00
2010-03-12 15:53:10 -08:00
2010-02-09 11:13:56 +01:00
2010-02-19 03:35:12 -05:00
2010-03-12 15:52:38 -08:00
2009-12-15 08:53:20 -08:00
2010-03-12 15:52:28 -08:00
2010-04-07 08:38:04 -07:00
2009-12-12 13:08:15 +01:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2010-02-10 23:49:08 +09:00
2009-11-04 09:50:58 -08:00
2010-02-03 20:32:28 -08:00
2010-04-12 07:55:15 -04:00
2010-02-19 15:52:40 -05:00
2010-02-14 07:13:47 -07:00
2010-02-23 23:14:47 -08:00
2010-02-04 10:23:02 -08:00
2009-11-04 09:50:58 -08:00
2009-11-04 09:50:58 -08:00
2010-03-12 15:53:11 -08:00
2009-12-03 11:43:23 +00:00
2010-03-05 00:20:31 +01:00
2010-02-10 17:47:17 -08:00
2009-10-30 15:06:37 -07:00
2010-03-12 15:52:44 -08:00
2010-03-02 14:28:49 -05:00
2009-11-04 09:50:58 -08:00
2010-03-12 15:53:10 -08:00
2010-03-12 15:52:43 -08:00
2010-01-21 23:55:25 -08:00
2010-02-16 13:38:56 +09:00
2009-11-30 12:02:53 +09:00
2010-03-12 15:52:44 -08:00
2009-12-16 22:32:29 -05:00
2010-01-14 22:38:09 -05:00
2010-03-12 15:52:36 -08:00
2010-02-18 15:43:09 -08:00
2009-11-13 20:46:24 +01:00
2009-10-29 11:17:40 +11:00
2009-11-10 20:54:38 -08:00
2010-01-05 09:17:33 +09:00
2010-03-12 10:03:42 +01:00
2009-12-16 12:16:49 -05:00