OSDN Git Service

slub: avoid redzone when choosing freepointer location
authorKees Cook <keescook@chromium.org>
Tue, 21 Apr 2020 01:13:42 +0000 (18:13 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Apr 2020 18:11:55 +0000 (11:11 -0700)
commit89b83f282d8ba380cf2124f88106c57df49c538c
tree1558992fadea29f2ff173d94543ef1d3af7fe21b
parent1eb64c07aab86eca7cdaa05a59d8da5a3ba758f8
slub: avoid redzone when choosing freepointer location

Marco Elver reported system crashes when booting with "slub_debug=Z".

The freepointer location (s->offset) was not taking into account that
the "inuse" size that includes the redzone area should not be used by
the freelist pointer.  Change the calculation to save the area of the
object that an inline freepointer may be written into.

Fixes: 3202fa62fb43 ("slub: relocate freelist pointer to middle of object")
Reported-by: Marco Elver <elver@google.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Tested-by: Marco Elver <elver@google.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Link: http://lkml.kernel.org/r/202004151054.BD695840@keescook
Link: https://lore.kernel.org/linux-mm/20200415164726.GA234932@google.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/slub.c