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 33C99D0D785 for ; Fri, 11 Oct 2024 13:01:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B602C6B007B; Fri, 11 Oct 2024 09:01:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B367C6B0095; Fri, 11 Oct 2024 09:01:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 9D6DB6B00A9; Fri, 11 Oct 2024 09:01:58 -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 7EFC16B007B for ; Fri, 11 Oct 2024 09:01:58 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 810B2140ECC for ; Fri, 11 Oct 2024 13:01:53 +0000 (UTC) X-FDA: 82661333832.24.B635599 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by imf27.hostedemail.com (Postfix) with ESMTP id B83964003B for ; Fri, 11 Oct 2024 13:01:53 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=oaq6u26x; spf=pass (imf27.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728651578; 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:dkim-signature; bh=QR96X5me7JPEdxmex0+cq4Kl2Zr+RXQlVgevmpU+1i0=; b=rf2lmPEwppu36t098CLzjWAIUHG+Es+T8CcakmPmiswuTFp4JbWMwtLHGHD2qnjj2vOpVS qqKCtWat5Ziv4BQQE7gkWtFSoiq9Yqi4qLiFKPKbrTFjMR98wfKEeKPNnE+mJzP9QADRV7 FSjLK7IuP5+DVmKf14tlXWBTMVHo0o0= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728651578; a=rsa-sha256; cv=none; b=QxNzc0zCBiHvKdceUDvqTPxGsfa4bdxGU2OMZL+qF5fkWOF+OdvaTaSyc/0MKxwPDIV8SX Ib44CornxuwC0ieHjyjFFWngh1R6vH0eG5BCbS9Kmcm2z1Z6wBya9wHr66UIRoFmI6Sa6a 8Up0IqsPDvT/omFLZuXl7kd3yL7JZ0w= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=oaq6u26x; spf=pass (imf27.hostedemail.com: domain of rppt@kernel.org designates 139.178.84.217 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 5723D5C5D87; Fri, 11 Oct 2024 13:01:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id DABE8C4CECC; Fri, 11 Oct 2024 13:01:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1728651714; bh=j6FIkJsgrJb7Fy59tSRAkzfdThNSkDRiwl7mc5Gyfrs=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=oaq6u26xuDAEns7R2BMHzk4mIfr5FvGiVAeZZthgyUlPcz06DFRl95J0wmkdOT54S YxSAeidiUzjAm9FHVkdDWMVY0Rbrih0bi/ggL0JYHKzOopKm6PqY7SOiicdRP66yLH 5VGXr5I3OyVhwrNf1s3DsezlYqKELPmsDJA9V5PkevyRbR9c/cPzuOfoCS+m2Co7l0 +b6MYlu7b05Tu5XRA7HGcdEBXgbkMUXnasokDLcI2U83NwvkTB9/gQY3jZ2G5u5tvh AFQJNhIyJak3q6KuqIiMeMoh+g8h6wyqQ854Avo5pBLLyOPI6RqZBJ4HC26lw54SRH zUMItw7kbSuLg== Date: Fri, 11 Oct 2024 15:58:04 +0300 From: Mike Rapoport To: Nathan Chancellor Cc: Andrew Morton , Andreas Larsson , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Borislav Petkov , Brian Cain , Catalin Marinas , Christoph Hellwig , Christophe Leroy , Dave Hansen , Dinh Nguyen , Geert Uytterhoeven , Guo Ren , Helge Deller , Huacai Chen , Ingo Molnar , Johannes Berg , John Paul Adrian Glaubitz , Kent Overstreet , "Liam R. Howlett" , Luis Chamberlain , Mark Rutland , Masami Hiramatsu , Matt Turner , Max Filippov , Michael Ellerman , Michal Simek , Oleg Nesterov , Palmer Dabbelt , Peter Zijlstra , Richard Weinberger , Russell King , Song Liu , Stafford Horne , Steven Rostedt , Thomas Bogendoerfer , Thomas Gleixner , Uladzislau Rezki , Vineet Gupta , Will Deacon , bpf@vger.kernel.org, linux-alpha@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-csky@vger.kernel.org, linux-hexagon@vger.kernel.org, linux-kernel@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org, linux-openrisc@vger.kernel.org, linux-parisc@vger.kernel.org, linux-riscv@lists.infradead.org, linux-sh@vger.kernel.org, linux-snps-arc@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-um@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev, sparclinux@vger.kernel.org, x86@kernel.org Subject: Re: [PATCH v5 6/8] x86/module: perpare module loading for ROX allocations of text Message-ID: References: <20241009180816.83591-1-rppt@kernel.org> <20241009180816.83591-7-rppt@kernel.org> <20241010225411.GA922684@thelio-3990X> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241010225411.GA922684@thelio-3990X> X-Rspamd-Queue-Id: B83964003B X-Stat-Signature: yf3qgx4b1grot6r65w45u597gja4t8iq X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1728651713-635963 X-HE-Meta: U2FsdGVkX18Qm60sw71HkuScDG2w/WatAvd4c3Atr8fhDGUYLSTtZO/RYLqpUkc2gKF5+DrGWBZk4HidhdVKPht8iTLlz57fTarjNvGhYCDHn1kPHGsu3+/YVehKUIxJs+KeEkL3ejNNbshHppNeNROzQkuimL+NebF3t5B5xMgE1CF4/VefZylQohH7cQeX+YXiMN/l/Yjj5DPKC1B/F9ilG7Ibt32wMaCW/B3njLn2SZVDdExRFt8NN/x5/FJK2HsL7x9JepEb7EdkXV9apHW/QjrrmzvyoD87LrAjsNt2IAZDE1sTILyBPi3Qi5cUgWPCEuRuzYXbcFfpikTitMb1Pqf9mkU5o7ZOptgcy5CGTJB4d3o7m+IOXVnffU40CPdfnBz5LkRYFIyyM2WqPcLuLkdTuPOhaLfUD6ociriAfnHuJcMhHAwVCdArsACfA4rDs+qJxSKjzJmH1YVuz6XkEOXY2xs7l4m5WeHirLWGHLhCMMa5l+8+/bqwKCIevUUaDfb1VJS4F5zBG0mKyj+T2XMas42LaKdJc9sV5d+ETVAGuWCwNI7Atpdfo/zclvvcUpHWwIslpLPM8mxXy97MnQJA+CrXIolRb/EfSx/jouNgatrGde4RDHjHtO+gyN5kjm+2lDm46iWDDN2BALhXzJe3f/etlegTKktm2wKOPh3Fdmw9XGXJgOeZzxpHMCmnQ0sHlBo1dE3rxNVjaZGbCkIkdOydgw/fxFh1SHgfuaJY5/WwGwCADMn5OGjGOnuRG1ldmshdA7KdWR4UtvZD52Nd1EyFKtMKqWcsqq5Zm9vIfdwKnMy9Cdm89J6PgbIovca3BRieTspBoTdRbvyDHsNzR7Sdbop5DzA6nhsZwuKKyWexUAj1sAGrrFk6SBPoHaQMZlG2cKzQI94kgO+WpXT4Py+38JJAydgfaBk+AXyXFDgzhYdy9W6+1cCnQOJ17+hdTbmjpJlwgEF 6pVUfAGh rfvS0OfUVh9l416cHaS8bRqOQdERUdKTKRb8E+IWLr6GItP3W+8EqgKiaONxS6PMBjNLtyyrItqpJNR7FKdNQIVnSmaG+6WubTJmfQc5gqQFo6OzlRBqmI6bkkMT0JShftJisGE7lKPHPj5WMGCaVcg9tFHNXZy9IoLgcV2fTiqnp3Q8wRBJ1fUlW6hU0/UKcvaUozER7sYCyY1lLBtM5Sk7MylVL+J72AS1fjCDzfAoXszfcGbQqxg5YJnGTn0/vWx7E/E41vtYV5rlQKx8diVZX+g87/f5JgXK8N11lPbi7x8U= 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: On Thu, Oct 10, 2024 at 03:54:11PM -0700, Nathan Chancellor wrote: > Hi Mike, > > On Wed, Oct 09, 2024 at 09:08:14PM +0300, Mike Rapoport wrote: > > From: "Mike Rapoport (Microsoft)" > > > > When module text memory will be allocated with ROX permissions, the > > memory at the actual address where the module will live will contain > > invalid instructions and there will be a writable copy that contains the > > actual module code. > > > > Update relocations and alternatives patching to deal with it. > > > > Signed-off-by: Mike Rapoport (Microsoft) > > I bisected a boot failure that I see with CONFIG_CFI_CLANG enabled to > this change as commit be712757cabd ("x86/module: perpare module loading > for ROX allocations of text") in -next. > [ 0.000000] Linux version 6.12.0-rc2-00140-gbe712757cabd (nathan@n3-xlarge-x86) (ClangBuiltLinux clang version 19.1.0 (https://github.com/llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4), ClangBuiltLinux LLD 19.1.0 (https://github.com/llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)) #1 SMP PREEMPT_DYNAMIC Thu Oct 10 22:42:57 UTC 2024 > ... > [ 0.092204] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl > [ 0.093207] TAA: Mitigation: TSX disabled > [ 0.093711] MMIO Stale Data: Mitigation: Clear CPU buffers > [ 0.094228] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' > [ 0.095203] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' > [ 0.096203] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' > [ 0.097203] x86/fpu: Supporting XSAVE feature 0x020: 'AVX-512 opmask' > [ 0.098003] x86/fpu: Supporting XSAVE feature 0x040: 'AVX-512 Hi256' > [ 0.098203] x86/fpu: Supporting XSAVE feature 0x080: 'AVX-512 ZMM_Hi256' > [ 0.099203] x86/fpu: Supporting XSAVE feature 0x200: 'Protection Keys User registers' > [ 0.100204] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 > [ 0.101204] x86/fpu: xstate_offset[5]: 832, xstate_sizes[5]: 64 > [ 0.102203] x86/fpu: xstate_offset[6]: 896, xstate_sizes[6]: 512 > [ 0.103204] x86/fpu: xstate_offset[7]: 1408, xstate_sizes[7]: 1024 > [ 0.104051] x86/fpu: xstate_offset[9]: 2432, xstate_sizes[9]: 8 > [ 0.104204] x86/fpu: Enabled xstate features 0x2e7, context size is 2440 bytes, using 'compacted' format. > > then nothing after that. Boot is successful if CFI is not enabled (the > initrd will just shutdown the machine after printing the version string). > > If there is any further information I can provide or patches I can test, > I am more than happy to do so. I overlooked how cfi_*_callers routines update addr. This patch should fix it: diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 3b3fa93af3b1..cf782f431110 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -1148,11 +1148,13 @@ static int cfi_disable_callers(s32 *start, s32 *end, struct module *mod) for (s = start; s < end; s++) { void *addr = (void *)s + *s; - void *wr_addr = module_writable_address(mod, addr); + void *wr_addr; u32 hash; addr -= fineibt_caller_size; - hash = decode_caller_hash(addr); + wr_addr = module_writable_address(mod, addr); + hash = decode_caller_hash(wr_addr); + if (!hash) /* nocfi callers */ continue; @@ -1172,11 +1174,12 @@ static int cfi_enable_callers(s32 *start, s32 *end, struct module *mod) for (s = start; s < end; s++) { void *addr = (void *)s + *s; - void *wr_addr = module_writable_address(mod, addr); + void *wr_addr; u32 hash; addr -= fineibt_caller_size; - hash = decode_caller_hash(addr); + wr_addr = module_writable_address(mod, addr); + hash = decode_caller_hash(wr_addr); if (!hash) /* nocfi callers */ continue; @@ -1249,11 +1252,12 @@ static int cfi_rand_callers(s32 *start, s32 *end, struct module *mod) for (s = start; s < end; s++) { void *addr = (void *)s + *s; - void *wr_addr = module_writable_address(mod, addr); + void *wr_addr; u32 hash; addr -= fineibt_caller_size; - hash = decode_caller_hash(addr); + wr_addr = module_writable_address(mod, addr); + hash = decode_caller_hash(wr_addr); if (hash) { hash = -cfi_rehash(hash); text_poke_early(wr_addr + 2, &hash, 4); @@ -1269,14 +1273,15 @@ static int cfi_rewrite_callers(s32 *start, s32 *end, struct module *mod) for (s = start; s < end; s++) { void *addr = (void *)s + *s; - void *wr_addr = module_writable_address(mod, addr); + void *wr_addr; u32 hash; addr -= fineibt_caller_size; - hash = decode_caller_hash(addr); + wr_addr = module_writable_address(mod, addr); + hash = decode_caller_hash(wr_addr); if (hash) { text_poke_early(wr_addr, fineibt_caller_start, fineibt_caller_size); - WARN_ON(*(u32 *)(addr + fineibt_caller_hash) != 0x12345678); + WARN_ON(*(u32 *)(wr_addr + fineibt_caller_hash) != 0x12345678); text_poke_early(wr_addr + fineibt_caller_hash, &hash, 4); } /* rely on apply_retpolines() */ > Cheers, > Nathan -- Sincerely yours, Mike.