Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp39728imu; Tue, 8 Jan 2019 14:14:12 -0800 (PST) X-Google-Smtp-Source: ALg8bN5TmGcrlymASzvxUnCxR6IZBvtubYfAUCW7NkwKilIwZ1rlSReI7XxTXEnp4a19IcRY421E X-Received: by 2002:a63:8149:: with SMTP id t70mr3174693pgd.172.1546985652270; Tue, 08 Jan 2019 14:14:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1546985652; cv=none; d=google.com; s=arc-20160816; b=piNgoMu95jAa4Y/BOXmZCdWPLx/DOFtNGri+LUcrBPo9KvXzGJrH0JNmvYeWgbxWmi cdKN4abzP9VvFdssC9SLcQEcDmtmJhUOfwe2D4eu4cLnuU4Hd0qL9psQRiHxip0m8YAm 1/Zjv8PmbqIFVfzCRdS2IWJVTeb8BMeERbgX9xhMOPdMA+yQWGD/Tbb8myRykT18R9Nu PFYR7IeV6ydYaO0slIATsa8jlkF3bcf2hB5f4FjGrVBtuyoxxlsO6q/aJzt/lTAf0Aqm KeHHg5kSCfQ5leW0BQ5GMlWwK2iGlk6skAu2OHNKLi63d5AfsAojq5mvVt3qGanCn5jj 7n7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/u+r4Q/7s4wXuhLXm/yqsPJLBPFsG4smZb32n3VGyGc=; b=SXmSHrL7fXGFQXQrHZP8KI08ONcG6qm9YW3tMGUs4vvI9oy7jWJDFi+2XSsNkUFGSs Wp1tPbxwVmfnrXZTamZUxh0jILmvlw3JGoGI3rgRyucimiu1PNChI6rHn2TgLia7pgm7 7652cfW/COMgtok1XTxi2sXgDC1EecSlVeDu2MgtZf8v1JUDYxBTNmfws5rZZ0V3cM9X hk/TC2hEIl15bn3n+JjTo9Ad0gzylPCwK1frTJm/zUc9su9rjovBA7iKgCPYggmVtlnz AkKfMxUAKJ7XXKZcK/bes7SCvhjwvGrxXxWhuRNL00uO7t/NpKuWENJh3MSUm0sgNP0Q ++tw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ML2+ofL+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h96si29840573plb.230.2019.01.08.14.13.57; Tue, 08 Jan 2019 14:14:12 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=ML2+ofL+; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729989AbfAHT2U (ORCPT + 99 others); Tue, 8 Jan 2019 14:28:20 -0500 Received: from mail.kernel.org ([198.145.29.99]:35260 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729976AbfAHT2S (ORCPT ); Tue, 8 Jan 2019 14:28:18 -0500 Received: from sasha-vm.mshome.net (c-73-47-72-35.hsd1.nh.comcast.net [73.47.72.35]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id CCEBD20665; Tue, 8 Jan 2019 19:28:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546975697; bh=XkMQf4LAbIuz/s2TQsGvtiE2p6kdQ9tDek5GOtkdnxo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ML2+ofL+o6mH8DXtfYtJdcdKYO8mi3/O+PzwAruCek8c6hzj00qKpH98OFgzjXX1V 8gaqa+pNY7FyY9ZhB7nVJw7LCTmmawgBeCZrmyKdPvmq/nGErjn0d6zEFFP2n15c6U EZ4av1lm8K7SxoWOq4Zsw1tyOy9AceFV1rdoCYdo= From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Qian Cai , Will Deacon , Sasha Levin Subject: [PATCH AUTOSEL 4.20 061/117] arm64: kasan: Increase stack size for KASAN_EXTRA Date: Tue, 8 Jan 2019 14:25:29 -0500 Message-Id: <20190108192628.121270-61-sashal@kernel.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190108192628.121270-1-sashal@kernel.org> References: <20190108192628.121270-1-sashal@kernel.org> MIME-Version: 1.0 X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Qian Cai [ Upstream commit 6e8830674ea77f57d57a33cca09083b117a71f41 ] If the kernel is configured with KASAN_EXTRA, the stack size is increased significantly due to setting the GCC -fstack-reuse option to "none" [1]. As a result, it can trigger a stack overrun quite often with 32k stack size compiled using GCC 8. For example, this reproducer https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/madvise/madvise06.c can trigger a "corrupted stack end detected inside scheduler" very reliably with CONFIG_SCHED_STACK_END_CHECK enabled. There are other reports at: https://lore.kernel.org/lkml/1542144497.12945.29.camel@gmx.us/ https://lore.kernel.org/lkml/721E7B42-2D55-4866-9C1A-3E8D64F33F9C@gmx.us/ There are just too many functions that could have a large stack with KASAN_EXTRA due to large local variables that have been called over and over again without being able to reuse the stacks. Some noticiable ones are, size 7536 shrink_inactive_list 7440 shrink_page_list 6560 fscache_stats_show 3920 jbd2_journal_commit_transaction 3216 try_to_unmap_one 3072 migrate_page_move_mapping 3584 migrate_misplaced_transhuge_page 3920 ip_vs_lblcr_schedule 4304 lpfc_nvme_info_show 3888 lpfc_debugfs_nvmestat_data.constprop There are other 49 functions over 2k in size while compiling kernel with "-Wframe-larger-than=" on this machine. Hence, it is too much work to change Makefiles for each object to compile without -fsanitize-address-use-after-scope individually. [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81715#c23 Signed-off-by: Qian Cai Signed-off-by: Will Deacon Signed-off-by: Sasha Levin --- arch/arm64/include/asm/memory.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h index f0a5c9531e8b..778af0b7f7fd 100644 --- a/arch/arm64/include/asm/memory.h +++ b/arch/arm64/include/asm/memory.h @@ -67,12 +67,17 @@ /* * KASAN requires 1/8th of the kernel virtual address space for the shadow * region. KASAN can bloat the stack significantly, so double the (minimum) - * stack size when KASAN is in use. + * stack size when KASAN is in use, and then double it again if KASAN_EXTRA is + * on. */ #ifdef CONFIG_KASAN #define KASAN_SHADOW_SCALE_SHIFT 3 #define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - KASAN_SHADOW_SCALE_SHIFT)) +#ifdef CONFIG_KASAN_EXTRA +#define KASAN_THREAD_SHIFT 2 +#else #define KASAN_THREAD_SHIFT 1 +#endif /* CONFIG_KASAN_EXTRA */ #else #define KASAN_SHADOW_SIZE (0) #define KASAN_THREAD_SHIFT 0 -- 2.19.1