From 8f9b0e0a8eb9d5181ab41cd78222986ed785881d Mon Sep 17 00:00:00 2001 From: David Keitel Date: Tue, 21 Oct 2014 16:26:17 -0700 Subject: [PATCH] mm: slub: panic for object and slab errors If the SLUB_DEBUG_PANIC_ON Kconfig option is selected, also panic for object and slab errors to allow capturing relevant debug data. Change-Id: Idc582ef48d3c0d866fa89cf8660ff0a5402f7e15 Signed-off-by: David Keitel Signed-off-by: Patrick Daly [isaacm@codeaurora.org: Use IS_ENABLED() for better legibility] Signed-off-by: Isaac J. Manjarres --- mm/slub.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/mm/slub.c b/mm/slub.c index 8834563cdb4b..3a63f0c053b7 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -686,11 +686,18 @@ static void print_trailer(struct kmem_cache *s, struct page *page, u8 *p) dump_stack(); } +static void slab_panic(const char *cause) +{ + if (IS_ENABLED(CONFIG_SLUB_DEBUG_PANIC_ON)) + panic("%s\n", cause); +} + void object_err(struct kmem_cache *s, struct page *page, u8 *object, char *reason) { slab_bug(s, "%s", reason); print_trailer(s, page, object); + slab_panic(reason); } static __printf(3, 4) void slab_err(struct kmem_cache *s, struct page *page, @@ -705,6 +712,7 @@ static __printf(3, 4) void slab_err(struct kmem_cache *s, struct page *page, slab_bug(s, "%s", buf); print_page_info(page); dump_stack(); + slab_panic("slab error"); } static void init_object(struct kmem_cache *s, void *object, u8 val) @@ -726,6 +734,7 @@ static void init_object(struct kmem_cache *s, void *object, u8 val) static void restore_bytes(struct kmem_cache *s, char *message, u8 data, void *from, void *to) { + slab_panic("object poison overwritten"); slab_fix(s, "Restoring 0x%p-0x%p=0x%x\n", from, to - 1, data); memset(from, data, to - from); }