From patchwork Fri Mar 14 21:39:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Deepak Gupta X-Patchwork-Id: 14017495 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 CAF78C28B30 for ; Fri, 14 Mar 2025 21:39:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3BFB2280018; Fri, 14 Mar 2025 17:39:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 36F08280017; Fri, 14 Mar 2025 17:39:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 19BB6280018; Fri, 14 Mar 2025 17:39:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id ED665280017 for ; Fri, 14 Mar 2025 17:39:49 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 2EC3CB9555 for ; Fri, 14 Mar 2025 21:39:51 +0000 (UTC) X-FDA: 83221474182.08.2E06B31 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) by imf25.hostedemail.com (Postfix) with ESMTP id 3E367A0014 for ; Fri, 14 Mar 2025 21:39:49 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=SWXvRGtS; spf=pass (imf25.hostedemail.com: domain of debug@rivosinc.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=debug@rivosinc.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1741988389; 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=kAIAgpv3AXe4grYgMLwnUee/eXYDz+xNUbGxtfEmLwk=; b=US5vOaacjvknabTnmDmucovz/haXnpjBjhkMQjWnWuLSegrFiAmE93x527lygAJc6GfblV LZfHoz4OnX1JOLjMTchoU/dhonAaE43xwEhikhC8GZ+uxyLL69VqBUC/PFQBRt82FsTXJ2 1OOfns0xlHkMIZ0HYtQeWcXMqw1tAbQ= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=rivosinc-com.20230601.gappssmtp.com header.s=20230601 header.b=SWXvRGtS; spf=pass (imf25.hostedemail.com: domain of debug@rivosinc.com designates 209.85.214.179 as permitted sender) smtp.mailfrom=debug@rivosinc.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1741988389; a=rsa-sha256; cv=none; b=WJ8jmMb8s8ojySP1UxHMIDd4aCESrxPpPC+/54AefdL8R5HLodLDHjr0AFJgUcfOlUCuDA +FdzLnsfHvIBLVUA/2qe3MGSGLMxBH5nsVPT/0ZJ8c0TXf/G/0Y4pT69mxMH88qJ2I/2s2 Cd1mxUTo4KU07Lx9PIqwcTA4BwDxDJM= Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-223fb0f619dso45704805ad.1 for ; Fri, 14 Mar 2025 14:39:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc-com.20230601.gappssmtp.com; s=20230601; t=1741988388; x=1742593188; darn=kvack.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kAIAgpv3AXe4grYgMLwnUee/eXYDz+xNUbGxtfEmLwk=; b=SWXvRGtSmZiPutIZEreCzdomhWpDX75l/M6GQ10wqkW/zsrUiEubpACFrQLMIqjDgN MBr8XIAx1RSOBKd3tK7o2NUzPJjoLp+PyumgV0BC/bVxTCu6G11VAqUI2GxEHN8k8mDf K+kSsKP7hQiPdrV22QiChuph6pJURiEwhXRrA0PmyYByF1Bvk8/W1UZ5VHh1pfy3lmnK JArrrPhC8M7e1FanRzaP+j9wbHKOVfTkC/6QpKmkQ6C09Cmgsog6d90Clb1Z6NrxNwV4 N57NQKVNhR0h6sRrOKSAst7SX8se0u7yer5+ygaDOd6+iLF0vF+RaFK1x45A3UBO4UWF yuCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741988388; x=1742593188; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kAIAgpv3AXe4grYgMLwnUee/eXYDz+xNUbGxtfEmLwk=; b=OUw9UxzOexegSv1TbZd0YmbOMCJhfj7fQOavjd3ZpcPegtyMCXbYTfbiiBiL5jAt/B yWbnSPvlBWsEtX+8XBAMKmY8xjcRw32dQNnM+awMdzb/Oe3avEgE7vfkxTmyyQ6e1ZH2 hWLq0WRzisCONj8ESeSaWAEsj1/J+1s5s8+WU/gugo5z/6zLkBvfKwlQAHTioHL2A8+U SB8e9orN4mjpzvozl4BvPCA+2k69dhfVrZyOn7v8oASJdO398BRx2CG1w3BxJd/deF1V ghINQyB7lXQksdHva12yLoYZkx0VSAYADU6e8OVo5etM1Q2Gm37jajPTuYQepTAFwwqY FLDA== X-Forwarded-Encrypted: i=1; AJvYcCVguXCUwsuBqcjHdmnlwqdkU6deUOasRUQrkXLZrYc292Bsvi55cObiHMZ74Z49TvoIcZYQN2S3zw==@kvack.org X-Gm-Message-State: AOJu0Ywvcq1zOiI5zeXd8LXJ+CHDj5JMScEgK5bDZsW4G6FNcmwzOjFa nID9NWEoFv6OIFRPHTjCNDhFCwNf6BM3R9rG/W/LXS5YsNKGoy6PZBj4m8hcpGs= X-Gm-Gg: ASbGncu3l/j3JbqBmStKVfqNB0KzIYrv7ttKVJq3Sy2brjrWvIi9ZchK8sofrjDNqN1 BBofX8ji4Z9R3isTOTJDS5r7QQ5eMQK1G1undEqXGNzNz3YCWhdFHItaNVLdFxI9M5ChNdVgTrR bWim0Mee9tQwGRWbd6sL/dqu6qWFs1W4NLjfzV6Ro8n7BBFjsla/3cMC63vBDiwpcjmv5qDLFef 7qOy6FFl3i50pdShK+MgP5CGLole3UjQOb/AdcMqTr/MFce/YP8iHaobAmRrr5vLWZ6FP6UBfOh S4frRmliEs1FOu7u2kquIcKfYskHzJDKff4H9cBQ2gk+ASdxxe68cP4= X-Google-Smtp-Source: AGHT+IHx7WQpWru2fKimtMpSmVFwsTrooQDFYBOULcY3q47kcw+TEVwpgQle1i3yqVDeVf/+DpJMig== X-Received: by 2002:a17:902:d2ca:b0:224:fa0:36d2 with SMTP id d9443c01a7336-225e0a82dcamr59199255ad.26.1741988388068; Fri, 14 Mar 2025 14:39:48 -0700 (PDT) Received: from debug.ba.rivosinc.com ([64.71.180.162]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-225c68a6e09sm33368855ad.55.2025.03.14.14.39.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Mar 2025 14:39:47 -0700 (PDT) From: Deepak Gupta Date: Fri, 14 Mar 2025 14:39:27 -0700 Subject: [PATCH v12 08/28] riscv mmu: teach pte_mkwrite to manufacture shadow stack PTEs MIME-Version: 1.0 Message-Id: <20250314-v5_user_cfi_series-v12-8-e51202b53138@rivosinc.com> References: <20250314-v5_user_cfi_series-v12-0-e51202b53138@rivosinc.com> In-Reply-To: <20250314-v5_user_cfi_series-v12-0-e51202b53138@rivosinc.com> To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, "H. Peter Anvin" , Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Lorenzo Stoakes , Paul Walmsley , Palmer Dabbelt , Albert Ou , Conor Dooley , Rob Herring , Krzysztof Kozlowski , Arnd Bergmann , Christian Brauner , Peter Zijlstra , Oleg Nesterov , Eric Biederman , Kees Cook , Jonathan Corbet , Shuah Khan , Jann Horn , Conor Dooley Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-riscv@lists.infradead.org, devicetree@vger.kernel.org, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-kselftest@vger.kernel.org, alistair.francis@wdc.com, richard.henderson@linaro.org, jim.shu@sifive.com, andybnac@gmail.com, kito.cheng@sifive.com, charlie@rivosinc.com, atishp@rivosinc.com, evan@rivosinc.com, cleger@rivosinc.com, alexghiti@rivosinc.com, samitolvanen@google.com, broonie@kernel.org, rick.p.edgecombe@intel.com, Zong Li , Deepak Gupta X-Mailer: b4 0.14.0 X-Rspam-User: X-Rspamd-Queue-Id: 3E367A0014 X-Rspamd-Server: rspam08 X-Stat-Signature: d94rbaeesxzre16188w88inrrc5donxn X-HE-Tag: 1741988389-330321 X-HE-Meta: U2FsdGVkX19+6OvqmW/jPFQvtUEr9aq7j75lvLx061KyXmjUV5lrN4zl1jN4PVM2uDLyk5vildJO4qqrwp80sC/wyHEJZB1BJA8d5z/2wAKUMRp6H9ji+NYKJck6VX9CGLVm3dxSRJl+GHU8njTTelzGYREHoYzSTm3lnTbAYA7V4Aw/g00iItfoggjkQ6gJri+8FB+NSwmWMQQfDuRigDbCEwXP2rJ3bpylYM9IgBECg/huzxDLobGUeMX5E2uC12RFPiy/XEjoTU+WOo4WjgtODl7z23pKhSLOmvchFp/eBbPgx7hJmsWy2idO6CZLanKNFWq3Q2k/0QEwC40J94ikFMBI/+Wm5AVdkbmxmS2sW+DbR2T+vqas1cwRjZpbZNA/Ni5ZxyMqBdmyHW3QbAfolTW92bdrrhypz9fd+oiHp4+nz7u5WLZOR6Oo0hZ/UxOil8OKjtqAzwhs4wWNBhQ6iB7U/DNQsHsZdG0WxDYnWbKAvQkRoCNtTViL/D3XIbaMuhHZzl5OWA+erG3l+nh1QapEtVN6EWFgict56XYGne1gGaGfa6N/RTeudBMPC+TMUs8i55aN9u4nuXvRsc6xc4gbmSRft2I37IJCFgPGbtMe0dKqWFhcH/4XmY5RAma0HS622xbJZwBF3ZLjC8aOFxKvX556vBKP/r79jHmRf3/0fNU/J1h6cliR86W/KW+oO7vJKAidmDRmpSPlwgV2V0uSjkMquHt3tab95oMlC8kIeDOjW+ee6ge9Jwc7kKiDPCpUq4NG/8kiZ36J5BNODTlavUJlrdV+MKbDTVmWkkwr05ZOb2q2KAGPIiRQ7HBU1p9x2ueABx7CZFD2cc+m2z+A2PfqxLtlXa0jNUUzp2+UiHUvnyRPAJrZmN1vV7NMGKHfeeV3M+uwBloLaMPqhuuicCQZ7eD5ChHuXDpexRXOF4FSS2wgIsieziW4osWZfZHUC9pN6lK5tXd z7Go3UkU 6YaLLU8Za7LdveJyhBbjDoUfgOXRWj2okGigSX7NcROzitivM81b5WXwulgTwoZJ0HY1MLS/OCNPyERThI2CMmkB37hAWs1Uk+K6HGue+Z4IN+pCBhayGUW3qgS7on5A8i6sPw0N5cttN/GtPYLeDVWjoWXBclKju6CqoYQ7Ih1r0RHgwK6pnVLP1s2+b4YLMFLkL2rozFwMILpE1wk6JxnwuP9ddv1VANB6pPHByTr+mX8LBK5khOrdkKfbJcl5Kewjed2OqVPHqI1M4RX+K/SaKqrqqdo3KAywos7R5XO+GYFq6+FFhZbz7RTA76fRbirvz0b4CHGGB4DkIpeF50rNsPBBwbnqHYqbd6mf9N6eSjP+cjJD2FSz+OUVgzQ31rzX3zXzVR0RXf1o1j2Qu13wL3KFVd2bGxPvQLQSCS+W/5cj5vI6hsWLuX1W/kUO6ewwC5fYmfqHy90ZXEBJwfoVq0WHqFQ2m9X0ex0eXKFe3xQjpBTA65Eyo2/v/90QIy4JHendS5Vx5opxxpgQFV6h3kYTfewUUGzKWxDYUehHzsopvdKdE+WzGMhpmw8IimG+G 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: List-Subscribe: List-Unsubscribe: pte_mkwrite creates PTEs with WRITE encodings for underlying arch. Underlying arch can have two types of writeable mappings. One that can be written using regular store instructions. Another one that can only be written using specialized store instructions (like shadow stack stores). pte_mkwrite can select write PTE encoding based on VMA range (i.e. VM_SHADOW_STACK) Reviewed-by: Alexandre Ghiti Reviewed-by: Zong Li Signed-off-by: Deepak Gupta --- arch/riscv/include/asm/pgtable.h | 7 +++++++ arch/riscv/mm/pgtable.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index ede43185ffdf..ccd2fa34afb8 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -416,6 +416,10 @@ static inline pte_t pte_wrprotect(pte_t pte) /* static inline pte_t pte_mkread(pte_t pte) */ +struct vm_area_struct; +pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma); +#define pte_mkwrite pte_mkwrite + static inline pte_t pte_mkwrite_novma(pte_t pte) { return __pte(pte_val(pte) | _PAGE_WRITE); @@ -749,6 +753,9 @@ static inline pmd_t pmd_mkyoung(pmd_t pmd) return pte_pmd(pte_mkyoung(pmd_pte(pmd))); } +pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma); +#define pmd_mkwrite pmd_mkwrite + static inline pmd_t pmd_mkwrite_novma(pmd_t pmd) { return pte_pmd(pte_mkwrite_novma(pmd_pte(pmd))); diff --git a/arch/riscv/mm/pgtable.c b/arch/riscv/mm/pgtable.c index 4ae67324f992..be5d38546bb3 100644 --- a/arch/riscv/mm/pgtable.c +++ b/arch/riscv/mm/pgtable.c @@ -155,3 +155,20 @@ pmd_t pmdp_collapse_flush(struct vm_area_struct *vma, return pmd; } #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ + +pte_t pte_mkwrite(pte_t pte, struct vm_area_struct *vma) +{ + if (vma->vm_flags & VM_SHADOW_STACK) + return pte_mkwrite_shstk(pte); + + return pte_mkwrite_novma(pte); +} + +pmd_t pmd_mkwrite(pmd_t pmd, struct vm_area_struct *vma) +{ + if (vma->vm_flags & VM_SHADOW_STACK) + return pmd_mkwrite_shstk(pmd); + + return pmd_mkwrite_novma(pmd); +} +