From patchwork Mon Jul 24 12:45:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Brown X-Patchwork-Id: 13324631 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 681EFC05051 for ; Mon, 24 Jul 2023 12:48:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F413A6B0075; Mon, 24 Jul 2023 08:48:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id EF1906B007D; Mon, 24 Jul 2023 08:48:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB9DA6B0082; Mon, 24 Jul 2023 08:48:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CDC036B0075 for ; Mon, 24 Jul 2023 08:48:12 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 97F9040B03 for ; Mon, 24 Jul 2023 12:48:12 +0000 (UTC) X-FDA: 81046483224.26.DF8975C Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf09.hostedemail.com (Postfix) with ESMTP id B2D2A140014 for ; Mon, 24 Jul 2023 12:48:10 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=eAHFD3Vk; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of broonie@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=broonie@kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1690202890; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=RiRra371vnC/K7aW/lS3yxDUYWSr5hTseY8nLXePyV0=; b=jmA8RAUdWzOH7n1O7V0x+QtJeM9mMnlne+a3+Ks3nUb1msYMRjkKl36XJRZxrorGeAoEuI 9Ypn8qSDNaLeRzzVvA2mwo378VXXQ2P1nCSYPupkbFfuHiLXoVIbs3rj0b3wp62pwWt64v nOrB7jo7Ib6Wnr71LSC+D1JWEE885RY= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=eAHFD3Vk; dmarc=pass (policy=none) header.from=kernel.org; spf=pass (imf09.hostedemail.com: domain of broonie@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=broonie@kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1690202890; a=rsa-sha256; cv=none; b=Hf8HZhWXatO2sN4DqU/v3MfXmxWsb9dUPlb4pjyuPwn+O8OF1ps2X6UUM8ecKPIxhAWe+j 8OslLoinfASXKet2LEqtvUkhOUs2+4bdbA158HS4DuNLA9JPbH273J+LGZATJVhJ308Mp7 RM/cQTqTpmTCBm+anM+hvBSzgYzT5cE= Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id DCC1861150; Mon, 24 Jul 2023 12:48:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9852CC433C7; Mon, 24 Jul 2023 12:48:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690202889; bh=viG5anxcCcnETy6WTEqLj0O+gpdZleg7ylSYSUDSWcI=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=eAHFD3VkLN/8hYIgqRqDjQ6LYTYEEBqeysndIBpWyaqChnJimQhI2SWLffN0KZPuj lIir4tYMNSE/l0Imtt32k/Aq1wucbaZFpvPA0Q76Ftk5Q2jz6gyNgoMwvHITgWPKzz TU1gqXlVS9FVW1MNqWsf8w8XXunp1vTJmuOtK7yhaklMl6nMB+HxiZaZqRJBEHgEhy byqtJUMFFWC+9RJqhZIgnfP2BJDR0dx5Qq4KNXqCldfDulWjLtbVzSdsihRjnfTEh2 DrOZ3c8YOFjiKv0FrziAZlTVf/nMRKDSfIxMJVdP9+jOkJpXRB+Lop3XzdQmgwvwPe uq0oKZomv4thg== From: Mark Brown Date: Mon, 24 Jul 2023 13:45:58 +0100 Subject: [PATCH v2 11/35] arm64/mm: Map pages for guarded control stack MIME-Version: 1.0 Message-Id: <20230724-arm64-gcs-v2-11-dc2c1d44c2eb@kernel.org> References: <20230724-arm64-gcs-v2-0-dc2c1d44c2eb@kernel.org> In-Reply-To: <20230724-arm64-gcs-v2-0-dc2c1d44c2eb@kernel.org> To: Catalin Marinas , Will Deacon , Jonathan Corbet , Andrew Morton , Marc Zyngier , Oliver Upton , James Morse , Suzuki K Poulose , Arnd Bergmann , Oleg Nesterov , Eric Biederman , Kees Cook , Shuah Khan , "Rick P. Edgecombe" , Deepak Gupta , Ard Biesheuvel , Szabolcs Nagy Cc: "H.J. Lu" , Paul Walmsley , Palmer Dabbelt , Albert Ou , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, kvmarm@lists.linux.dev, linux-fsdevel@vger.kernel.org, linux-arch@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, Mark Brown X-Mailer: b4 0.13-dev-099c9 X-Developer-Signature: v=1; a=openpgp-sha256; l=1225; i=broonie@kernel.org; h=from:subject:message-id; bh=viG5anxcCcnETy6WTEqLj0O+gpdZleg7ylSYSUDSWcI=; b=owEBbQGS/pANAwAKASTWi3JdVIfQAcsmYgBkvnKRaZSoY2+MaaD6WZiUULr2xdVlp7ZPrzrnZmLl EHOK+gKJATMEAAEKAB0WIQSt5miqZ1cYtZ/in+ok1otyXVSH0AUCZL5ykQAKCRAk1otyXVSH0Mg7B/ 9+4k2ZXisvhnKjAsSHTUw1WHN7uidVpsJ/tQIxcwlf/sL96Wr7p6Dt3WpcFegBwJyWipn6L5XmrDzp TLd6eWFsOwxF6bMxL71UbwQ929Lih6fQ5r2sUQxNEwTKYmrIzhvm3paIYNtGe/17bHGmT5+fxtxHG4 7o5KhB1DsaTLY9ECCB38jAMstQ7+Lv/on3xMjPHnXrR7+U52NdveoIDKePI9eiQ01sF+Ylw/EEmzIJ KCqoCbYhFOAwUVuppI/P3fHgbq9mkLk+K8CPa3KY+fZEMQz6DsApbzkl1+HcynR3gRKzR6YGMA227w dorur6W9UQcXxTVIfPt+VAxzu2iB5Q X-Developer-Key: i=broonie@kernel.org; a=openpgp; fpr=3F2568AAC26998F9E813A1C5C3F436CA30F5D8EB X-Rspamd-Queue-Id: B2D2A140014 X-Rspam-User: X-Rspamd-Server: rspam02 X-Stat-Signature: nytzm8tu93r3e783gj86sorxhzr86wwd X-HE-Tag: 1690202890-824787 X-HE-Meta: U2FsdGVkX1+N+uDXfVDxHRrLf+3BRwisZrh6qmN9Pw3SzAEmlPUrexove3BWxveQHWkjlgWETGu/A7XIn8HBuxjp/2TgjdiUc8GaygDAcvW5RW0M2gs0WuFHTzpPnGfarmvHX22e8gVcSMv7SutP6D3REQmO/eaDDaAhlXJUrKyxSIWzmKofrYnXR524oVI7qQyzCI2VvoDCRL2eyKnSWrJO5fNDY4CUj9voyT0mQVnS8twZ4ga381iCpVSioVbOSty3JChs3jvvWaxbDR3sbgk/xWVp9jKQ9x5kL9lxwlMXUPbLiS+QDsly2mb2nGPO8wAAJtPl/05cqLfOkggl3G7mG5NgH0ufwOdQW8HO1Na22I60lhsug1lggMQ5vRK9/f7//vqDArt2qpCIyZ16ZKa0Tn3yYcMO5aErgqbeSZDA5GGnLzO/9UL2gTg5Z1bQwDlBYYVDpCzSHDIaZPNtbZVK8mEk9tLJfDlSEM9qi7zkWDw3QpUqtva7k0nBjpYCcXsLFfaZH5oiKGKlgigBwlzKfbSWFoWMyJM+0XC9AFgx5tARxI9Xp21RLTtFnaoRupEcyWMe9SZ6tkumBkdruig0FyOiPFuTFrQzqeWkuWKvWykV5pacG11XZEbvEGxkxLwYQAsYHArXolpp0qtzfeGHHneG32dyepzd7OH88GbUF/r1LQOjKn6Q3BZpaNTztbNEadDWKXD+ipwMjxPJv76yYXsUjBtWmG3lhSvXqkusPW/57zUywz2HRKzf+F7UWSJ40PsyLnAXCXQdU63WFBYkutl3zGjlA88sJ5yiqw43Ij0qQYIuTBddE1iRsZHk+lQ4cPx4TvLUwKdJ1y/XTA1RnZi3IYL8fNkl29Qje9GcfxkvrTSEoPoSPbZ9WvkP0drtsKuHMdbYq9VKV0TTyhUUG1wKzCD5VoWiSaUtYfoftPY6qGmOTEARr3azr7z0A5lebl9HVmpXzHLoK3k /CPULfxi Vb6ZiZnAXgpg507rQCZuoM7ktM6WoGZ8QAiaeR6JPLyAK2KB/wGCg7n5btkMt4yqW6AhcB6K5eqvhXZTKiuc2033UlRBRRG3RN+/w0JpWltbpXLSQxy7VQXbdcNrJOkIsNV2C74Y7tzN3ImwB6UQUuHHQFg4RC4qs8rm8UA8Md1qF2JLwnO3s6/MvTMHTTXRyvo/fzRUorQwVHOAbU03D7cycjGkU18VJZkmWvl2ytQrQaoVcySg/a4UKBB5gMKuYVWysTnGoxsWQN6rx6kHba9SasbnRl+OIiN0RGzFFe4MtUF8Dllfxgz6FmnydzQa+XO+6larxULQ4D77iDQJf65s6p2Bx9fEUBzHN6oAb1MLhhvQbiCE38uHv27q+BzxWpeqzFLhJltt7KXV2w2zbbCN7aoeQNaEpiVyUlsDJJ+Qfd4I= 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: Map pages flagged as being part of a GCS as such rather than using the full set of generic VM flags. This is done using a conditional rather than extending the size of protection_map since that would make for a very sparse array. Signed-off-by: Mark Brown --- arch/arm64/mm/mmap.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/arch/arm64/mm/mmap.c b/arch/arm64/mm/mmap.c index 8f5b7ce857ed..e2ca770920ed 100644 --- a/arch/arm64/mm/mmap.c +++ b/arch/arm64/mm/mmap.c @@ -79,8 +79,23 @@ arch_initcall(adjust_protection_map); pgprot_t vm_get_page_prot(unsigned long vm_flags) { - pteval_t prot = pgprot_val(protection_map[vm_flags & + pteval_t prot; + + /* + * If this is a GCS then only interpret VM_WRITE. + * + * TODO: Just make protection_map[] bigger? Nothing seems + * ideal here. + */ + if (system_supports_gcs() && (vm_flags & VM_SHADOW_STACK)) { + if (vm_flags & VM_WRITE) + prot = _PAGE_GCS; + else + prot = _PAGE_GCS_RO; + } else { + prot = pgprot_val(protection_map[vm_flags & (VM_READ|VM_WRITE|VM_EXEC|VM_SHARED)]); + } if (vm_flags & VM_ARM64_BTI) prot |= PTE_GP;