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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 911C7C25B7E for ; Fri, 31 May 2024 15:21:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 07E576B0092; Fri, 31 May 2024 11:21:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 02F326B0098; Fri, 31 May 2024 11:21:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E5FC46B0099; Fri, 31 May 2024 11:21:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id C6D8A6B0092 for ; Fri, 31 May 2024 11:21:50 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 671C5161263 for ; Fri, 31 May 2024 15:21:50 +0000 (UTC) X-FDA: 82179055980.23.27F19B1 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by imf10.hostedemail.com (Postfix) with ESMTP id 748F0C0015 for ; Fri, 31 May 2024 15:21:48 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf10.hostedemail.com: domain of joey.gouly@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=joey.gouly@arm.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1717168908; 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: in-reply-to:in-reply-to:references:references; bh=TBUq/NXTdPMlAQSA4vgMbOux5NoYZISJJbzaJacjbzY=; b=Dk2HmIhOhTqhjv9qd5owX0HeXB6RmwmQkVpxNCV/XWioI4y/jZpCpb39bTeL526tZ+L8bK NrMf/D95wyWvxqvKG4igYNmfPHvxmkz4Q3Tj5ECPF7GxPfvHGDstZ5F4ybDeMAt+V0CECe Xj01K0x7dl6MCMTF+C6dqgn9tlf4ZU0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1717168908; a=rsa-sha256; cv=none; b=Ew+YkEkf/7V/p2YhkZWAOxtl5MAfGQIouD7KGy2r+2CkNV4BoK2yC5CdlkHJXXJRWgwpYQ b/oxZHwMovyuoAf71AFPlBlQcub9EbFqUmFEQF6MTTylYEajyGTIAG6Sg0nowzYZY1EFmd Lxq5b29geFpxj4J8qByLzsnEbTvfhHY= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; dmarc=pass (policy=none) header.from=arm.com; spf=pass (imf10.hostedemail.com: domain of joey.gouly@arm.com designates 217.140.110.172 as permitted sender) smtp.mailfrom=joey.gouly@arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8D4BD1424; Fri, 31 May 2024 08:22:11 -0700 (PDT) Received: from e124191.cambridge.arm.com (e124191.cambridge.arm.com [10.1.197.45]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 31AA63F641; Fri, 31 May 2024 08:21:44 -0700 (PDT) Date: Fri, 31 May 2024 16:21:38 +0100 From: Joey Gouly To: Szabolcs Nagy , dave.hansen@linux.intel.com Cc: linux-arm-kernel@lists.infradead.org, akpm@linux-foundation.org, aneesh.kumar@kernel.org, aneesh.kumar@linux.ibm.com, bp@alien8.de, broonie@kernel.org, catalin.marinas@arm.com, christophe.leroy@csgroup.eu, dave.hansen@linux.intel.com, hpa@zytor.com, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linuxppc-dev@lists.ozlabs.org, maz@kernel.org, mingo@redhat.com, mpe@ellerman.id.au, naveen.n.rao@linux.ibm.com, npiggin@gmail.com, oliver.upton@linux.dev, shuah@kernel.org, tglx@linutronix.de, will@kernel.org, x86@kernel.org, kvmarm@lists.linux.dev Subject: Re: [PATCH v4 17/29] arm64: implement PKEYS support Message-ID: <20240531152138.GA1805682@e124191.cambridge.arm.com> References: <20240503130147.1154804-1-joey.gouly@arm.com> <20240503130147.1154804-18-joey.gouly@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Stat-Signature: qjxapsfywod68nehhrmf6m1tycani7gq X-Rspamd-Queue-Id: 748F0C0015 X-Rspam-User: X-Rspamd-Server: rspam01 X-HE-Tag: 1717168908-301590 X-HE-Meta: U2FsdGVkX1/GJWA4d1Bb6Uwlt4r0Z5a+YuLeew1qOgjZmCa4DWng0dXOTY28rEN6217YH6ZvNL/jymJ68wkvk6TlxMlIkFYjwqVUrXl0oF/QtzhjwmcVoJJ26Eemb8z3TXBxlEs2MjcDFcygz7l+b0HLOuPYsrgmrx5xzdz4Goi1/+u08Ws9UoaZQdvZJGKDRV4bkpADVfryc0gtJ5Y0rPJgxy7GBH8xfC9xQ3nfDD3u8VSgHwpJkND5xUvZhP9MU3luBmKMXwXQ2iLQJYeEwPC0lmAnT34C4Ob26iOx+zXXBfcquUZ2InJ1/rw7HOeT2KXWFzwAEnrbJJmfVZpoHkovtSA50Yre+If37Jq70OnF5dOnuYvYR/qn6lY5jik89rcS+NA4km3iwD1W2TpTLkqbdyk+0NmWSiUD+sdInob9UWMEftZuOEsJ2kmvA6OynLgiOiQKClZ39DI3NBxX2DYx6iq4E1hg0pnieMrSWojLrYXgvZqKy+f+kBlcFO+2V1PKOFXn//hlkydnmskRKrKK8z0VF9tLfRhi6Ac/ZsKLoSCeKeIVdpaGlkjuebni8UTBkRHSBWXtooPJB0AY3euDoVPzI5sELZCTgoXuv3yfoGq/MVJRVKKAGRs32OVcDwQ6/RKMVDfJin9X2+kfaVkWW+TZzUWDH5fQKFb3sB+kMCkJLyTBrNXaIYFfHOoD2TZmhGepaEkwvskp2WOzQeNBfsbwUZwscoBaom3n2wacrV4B9WvVhxQu9UBmbcinpdtbVZyk4G4AjQlzuY/penRz87jMylAM4Ri8LdmKSaXeBgb7yQqiOwEdhlOmBzNDZtdZjOBXqHZZ0yhuViTA1QHTlNI+wR7J5if0tNwY/HENMwVCOzJ6+w69NH4Mglv/7X/TIk/Pex5nfxOdHzisbFjRS9cND/1gytPQarCC26DFl9dqka6Z2kJnT2fO9hN1RUcv/jnEYdoOSZMUv7i CmEaIlo1 w66LBo+h6hMHsDtLA7Xq/Q30+duROv0Jj9LvA55Z8NOjiqq4J/h1KXQ0FL2rH/DIqAjUDjLMUrXwC948eLtsw7Nu1HufzizV3DRBXuIB+PxGaU4cWMil78faRWEeFKT88rTopSaCbQAU+ZPiC5ycOnOXGUw== 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: Hi Szabolcs, On Fri, May 31, 2024 at 03:57:07PM +0100, Szabolcs Nagy wrote: > The 05/03/2024 14:01, Joey Gouly wrote: > > Implement the PKEYS interface, using the Permission Overlay Extension. > ... > > +#ifdef CONFIG_ARCH_HAS_PKEYS > > +int arch_set_user_pkey_access(struct task_struct *tsk, int pkey, unsigned long init_val) > > +{ > > + u64 new_por = POE_RXW; > > + u64 old_por; > > + u64 pkey_shift; > > + > > + if (!arch_pkeys_enabled()) > > + return -ENOSPC; > > + > > + /* > > + * This code should only be called with valid 'pkey' > > + * values originating from in-kernel users. Complain > > + * if a bad value is observed. > > + */ > > + if (WARN_ON_ONCE(pkey >= arch_max_pkey())) > > + return -EINVAL; > > + > > + /* Set the bits we need in POR: */ > > + if (init_val & PKEY_DISABLE_ACCESS) > > + new_por = POE_X; > > + else if (init_val & PKEY_DISABLE_WRITE) > > + new_por = POE_RX; > > + > > given that the architecture allows r,w,x permissions to be > set independently, should we have a 'PKEY_DISABLE_EXEC' or > similar api flag? > > (on other targets it can be some invalid value that fails) I didn't think about the best way to do that yet. PowerPC has a PKEY_DISABLE_EXECUTE. We could either make that generic, and X86 has to error if it sees that bit, or we add a arch-specific PKEY_DISABLE_EXECUTE like PowerPC. A user can still set it by interacting with the register directly, but I guess we want something for the glibc interface.. Dave, any thoughts here? > > > + /* Shift the bits in to the correct place in POR for pkey: */ > > + pkey_shift = pkey * POR_BITS_PER_PKEY; > > + new_por <<= pkey_shift; > > + > > + /* Get old POR and mask off any old bits in place: */ > > + old_por = read_sysreg_s(SYS_POR_EL0); > > + old_por &= ~(POE_MASK << pkey_shift); > > + > > + /* Write old part along with new part: */ > > + write_sysreg_s(old_por | new_por, SYS_POR_EL0); > > + > > + return 0; > > +} > > +#endif Thanks, Joey