From: Tetsuo Handa Date: Wed, 25 Sep 2019 23:47:33 +0000 (-0700) Subject: kexec: bail out upon SIGKILL when allocating memory. X-Git-Tag: v5.15~5421^2~42 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7c3a6aedcd6aae0a32a527e68669f7dd667492d1;p=platform%2Fkernel%2Flinux-starfive.git kexec: bail out upon SIGKILL when allocating memory. syzbot found that a thread can stall for minutes inside kexec_load() after that thread was killed by SIGKILL [1]. It turned out that the reproducer was trying to allocate 2408MB of memory using kimage_alloc_page() from kimage_load_normal_segment(). Let's check for SIGKILL before doing memory allocation. [1] https://syzkaller.appspot.com/bug?id=a0e3436829698d5824231251fad9d8e998f94f5e Link: http://lkml.kernel.org/r/993c9185-d324-2640-d061-bed2dd18b1f7@I-love.SAKURA.ne.jp Signed-off-by: Tetsuo Handa Reported-by: syzbot Cc: Eric Biederman Reviewed-by: Andrew Morton Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c index d5870723..15d70a9 100644 --- a/kernel/kexec_core.c +++ b/kernel/kexec_core.c @@ -300,6 +300,8 @@ static struct page *kimage_alloc_pages(gfp_t gfp_mask, unsigned int order) { struct page *pages; + if (fatal_signal_pending(current)) + return NULL; pages = alloc_pages(gfp_mask & ~__GFP_ZERO, order); if (pages) { unsigned int count, i;