Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d32ddd8f authored by Nick Piggin's avatar Nick Piggin Committed by Linus Torvalds
Browse files

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: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Acked-by: default avatarMatt Mackall <mpm@selenic.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent a3474224
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -321,7 +321,8 @@ static void *slob_alloc(size_t size, gfp_t gfp, int align, int node)
		/* Improve fragment distribution and reduce our average
		/* Improve fragment distribution and reduce our average
		 * search time by starting our next search here. (see
		 * search time by starting our next search here. (see
		 * Knuth vol 1, sec 2.5, pg 449) */
		 * Knuth vol 1, sec 2.5, pg 449) */
		if (free_slob_pages.next != prev->next)
		if (prev != free_slob_pages.prev &&
				free_slob_pages.next != prev->next)
			list_move_tail(&free_slob_pages, prev->next);
			list_move_tail(&free_slob_pages, prev->next);
		break;
		break;
	}
	}