From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D763AC433EF for ; Mon, 11 Oct 2021 14:34:22 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 7B65960E74 for ; Mon, 11 Oct 2021 14:34:21 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 7B65960E74 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=me.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 1FC5A80008; Mon, 11 Oct 2021 10:34:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1D2C56B0072; Mon, 11 Oct 2021 10:34:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 09A7280008; Mon, 11 Oct 2021 10:34:21 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0212.hostedemail.com [216.40.44.212]) by kanga.kvack.org (Postfix) with ESMTP id F1E646B0071 for ; Mon, 11 Oct 2021 10:34:20 -0400 (EDT) Received: from smtpin26.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id B2848181B0496 for ; Mon, 11 Oct 2021 14:34:20 +0000 (UTC) X-FDA: 78684401880.26.5601EF3 Received: from pv50p00im-ztdg10021201.me.com (pv50p00im-ztdg10021201.me.com [17.58.6.45]) by imf08.hostedemail.com (Postfix) with ESMTP id 517E9300128C for ; Mon, 11 Oct 2021 14:34:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=me.com; s=1a1hai; t=1633962858; bh=FpaFBzvGELmDenSoiEWg7C6khvBd8mZLDt8PAvrNQPk=; h=From:To:Subject:Date:Message-Id:MIME-Version; b=M9tY9Y+zmHCJqIeUveVVttLWg0yPrLJUerGc9HZkb9ALP4g+na/cmY+iZ1rtrgUVP a4UI6ymxraCcFA8TZ04y5pzC4gOUAuZX+t/PLO85D4nuwR7lpJA8aREI+uU6F5WKjI 7lDkAsmcb1BNd3GfHQhmRJVNqVubJTWI7rzKdF1lTrpdpqCneL/FBd8j072xbCV05h TXHxb4Y2Huf8ISL588L3ZTg+1D+QurkTLED9UcUX/HudCk9qgl+HbCCCK8+3AByAn7 lDnhLzsPI5XP7rPg1+Dz+ZlINCvu3lmuhjhKtrnkXw+3B5vpL7RD4J+0rDT2gza5lv ct7HfM9lsYlIA== Received: from xiongwei.. (unknown [120.245.2.114]) by pv50p00im-ztdg10021201.me.com (Postfix) with ESMTPSA id 92BADA40283; Mon, 11 Oct 2021 14:34:08 +0000 (UTC) From: sxwjean@me.com To: linux-mm@kvack.org, x86@kernel.org Cc: Xiongwei Song , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Kees Cook , "H. Peter Anvin" , Dave Hansen , Andy Lutomirski , Peter Zijlstra , Andrew Morton , Arnd Bergmann , Al Viro , Gabriel Krisman Bertazi , Lai Jiangshan , Huang Rui , Yazen Ghannam , Kim Phillips , Oleg Nesterov , Balbir Singh , "David S. Miller" , sxwjean@me.com, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/6] mm/util: Support CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES Date: Mon, 11 Oct 2021 22:31:47 +0800 Message-Id: <20211011143150.318239-4-sxwjean@me.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211011143150.318239-1-sxwjean@me.com> References: <20211011143150.318239-1-sxwjean@me.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.425,18.0.790 definitions=2021-10-11_05:2021-10-07,2021-10-11 signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 mlxscore=0 mlxlogscore=914 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-2009150000 definitions=main-2110110085 X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: 517E9300128C X-Stat-Signature: zwmc5qz4n5qbc5r9kdrpm7wfmwinxrrz Authentication-Results: imf08.hostedemail.com; dkim=pass header.d=me.com header.s=1a1hai header.b=M9tY9Y+z; dmarc=pass (policy=quarantine) header.from=me.com; spf=pass (imf08.hostedemail.com: domain of sxwjean@me.com designates 17.58.6.45 as permitted sender) smtp.mailfrom=sxwjean@me.com X-HE-Tag: 1633962860-861799 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Xiongwei Song With CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES enabled, archs can support 64bit process invoke 32bit syscall via compatible mmap(), which uses mmap_compat_base and mmap_compat_legacy_base of mm_struct, which only x86 uses so far. Here we assume other archs will support CONFIG_HAVE_ARCH_COMPAT_MMAP_BASE= S as well. Signed-off-by: Xiongwei Song --- arch/x86/include/asm/processor.h | 4 ++++ mm/util.c | 21 +++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/proc= essor.h index 577f342dbfb2..fb7a4f21d412 100644 --- a/arch/x86/include/asm/processor.h +++ b/arch/x86/include/asm/processor.h @@ -787,6 +787,10 @@ extern void start_thread(struct pt_regs *regs, unsig= ned long new_ip, #define __TASK_UNMAPPED_BASE(task_size) (PAGE_ALIGN(task_size / 3)) #define TASK_UNMAPPED_BASE __TASK_UNMAPPED_BASE(TASK_SIZE_LOW) =20 +#ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES +#define TASK_UNMAPPED_COMPAT_BASE __TASK_UNMAPPED_BASE(task_size_32bit()= ) +#endif + #define KSTK_EIP(task) (task_pt_regs(task)->ip) =20 /* Get/set a process' ability to use the timestamp counter instruction *= / diff --git a/mm/util.c b/mm/util.c index 38326ef21a3b..ab3711c445e6 100644 --- a/mm/util.c +++ b/mm/util.c @@ -357,8 +357,9 @@ unsigned long arch_mmap_rnd(void) { unsigned long rnd; =20 -#ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS - if (is_compat_task()) +#if defined(CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS) \ + || defined(CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES) + if (is_compat_task() || in_compat_syscall()) rnd =3D get_random_long() & ((1UL << mmap_rnd_compat_bits) - 1); else #endif /* CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS */ @@ -422,6 +423,22 @@ void arch_pick_mmap_layout(struct mm_struct *mm, str= uct rlimit *rlim_stack) mm->mmap_base =3D mmap_base(random_factor, STACK_TOP, rlim_stack); mm->get_unmapped_area =3D arch_get_unmapped_area_topdown; } +#ifdef CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES + /* + * The mmap syscall mapping base decision depends solely on the + * syscall type (64-bit or compat). This applies for 64bit + * applications and 32bit applications. The 64bit syscall uses + * mmap_base, the compat syscall uses mmap_compat_base. + */ + if (mmap_is_legacy(rlim_stack)) { + mm->mmap_compat_legacy_base =3D + TASK_UNMAPPED_COMPAT_BASE + random_factor; + mm->mmap_compat_base =3D mm->mmap_compat_legacy_base; + } else { + mm->mmap_compat_base =3D mmap_base(random_factor, + task_size_32bit(), rlim_stack); + } +#endif } #elif defined(CONFIG_MMU) && !defined(HAVE_ARCH_PICK_MMAP_LAYOUT) void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_sta= ck) --=20 2.30.2