slob: fix memory corruption

Previously, it would be possible for prev->next to point to
&free_slob_pages, and thus we would try to move a list onto itself, and
bad things would happen.

It seems a bit hairy to be doing list operations with the list marker as
an entry, rather than a head, but...

this resolves the following crash:

http://bugzilla.kernel.org/show_bug.cgi?id=9379

Signed-off-by: Nick Piggin <npiggin@suse.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Matt Mackall <mpm@selenic.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by Nick Piggin and committed by Linus Torvalds d32ddd8f a3474224

+2 -1
+2 -1
mm/slob.c
··· 321 321 /* Improve fragment distribution and reduce our average 322 322 * search time by starting our next search here. (see 323 323 * Knuth vol 1, sec 2.5, pg 449) */ 324 - if (free_slob_pages.next != prev->next) 324 + if (prev != free_slob_pages.prev && 325 + free_slob_pages.next != prev->next) 325 326 list_move_tail(&free_slob_pages, prev->next); 326 327 break; 327 328 }