From patchwork Wed Apr 24 11:10:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ryan Roberts X-Patchwork-Id: 13641742 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 3034EC4345F for ; Wed, 24 Apr 2024 11:10:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=LQXIFxyX/IXR0p0y8FUhoZD9G3wmiA6xvZGLMLDmUhQ=; b=tnNE+JhtDdHrUS Ae4vYTARXqmQ2owtBEJsshTTSwfDZoBnjzk/pf/YlGS4sj97VsLY8XUMxRJI0I5YuczUbMpkNwYTX uc7Fyi2rkZF3sDem/F9eoD6xf4SAaaecHkR0Lw5/3UOkXuVMhaQLNiVRyez6DCsDVJBfyIwUTLide aQzQx+oUqe+9jdWqWFkkQHRoVVaWm5RsjLcohhwLWyeJrK/KxpljDZhAmg1bH4VsKtK6SGIquQN01 RnviQqHDEk8LM4uYpNF8xYAjK7RAVZe2coHWdkTEPrDT67Kkgc9pH8t9Ryu7Z9KVzFk+1okXvKhjS w71CzVXqgV8ziW74llcQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzaWO-00000003qrs-3fbD; Wed, 24 Apr 2024 11:10:40 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rzaWD-00000003qm7-1zGo for linux-arm-kernel@lists.infradead.org; Wed, 24 Apr 2024 11:10:31 +0000 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 B5ADB2F; Wed, 24 Apr 2024 04:10:54 -0700 (PDT) Received: from e125769.cambridge.arm.com (e125769.cambridge.arm.com [10.1.196.27]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6ADC13F73F; Wed, 24 Apr 2024 04:10:25 -0700 (PDT) From: Ryan Roberts To: Catalin Marinas , Will Deacon , Joey Gouly , Ard Biesheuvel , Mark Rutland , Anshuman Khandual , David Hildenbrand , Peter Xu , Mike Rapoport , Shivansh Vij Cc: Ryan Roberts , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 0/2] arm64/mm: Enable userfaultfd write-protect Date: Wed, 24 Apr 2024 12:10:15 +0100 Message-Id: <20240424111017.3160195-1-ryan.roberts@arm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240424_041029_897031_4797AC3F X-CRM114-Status: GOOD ( 12.90 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi All, This series adds uffd write-protect support for arm64. The patches are extracted, without change, from a wider RFC I posted at [1]. Previous attempts to add uffd-wp (and soft-dirty) have failed because of a perceived lack of available PTE SW bits. However it actually turns out that there are 2 available but they are hidden. PTE_PROT_NONE was previously occupying a SW bit, but it only applies when PTE_VALID is clear, so this is moved to overlay PTE_UXN in patch 1, freeing up the SW bit. Bit 63 is marked as "IGNORED" in the Arm ARM, but it does not currently indicate "reserved for SW use" like it does for the other SW bits. I've confirmed with the spec owner that this is an oversight; the bit is intended to be reserved for SW use and the spec will clarify this in a future update. So now we have two spare bits; patch 2 enables uffd-wp on arm64, using the SW bit freed up by moving PTE_PROT_NONE. This leaves bit 63 spare for future use (e.g. soft-dirty - see RFC at [1] - or some other usage). This applies on top of v6.9-rc3. The all mm selftests involving uffd-wp now run and pass and no other selftest regressions are observed. [1] https://lore.kernel.org/all/20240419074344.2643212-1-ryan.roberts@arm.com/ Thanks, Ryan Ryan Roberts (2): arm64/mm: Move PTE_PROT_NONE and PMD_PRESENT_INVALID arm64/mm: Add uffd write-protect support arch/arm64/Kconfig | 1 + arch/arm64/include/asm/pgtable-prot.h | 12 ++++- arch/arm64/include/asm/pgtable.h | 71 ++++++++++++++++++++++++--- 3 files changed, 75 insertions(+), 9 deletions(-) --- 2.25.1