From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4944C388862 for ; Sat, 22 Aug 2026 13:54:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406845; cv=none; b=DoYd7BRJS8AKSPG0FgmCOsrlug09HdQ33ZMIkWT59ZcD+aMSkRPYkKEPdaqRU+ccWAic7jaNC/qZp55FvXIwF7WOFT/UkT4Xc7IvfBpscx1Hsci9ltDs1NMaArwR9lZqyHm1gJ5wWowTeeI+b6Sp/FEHE+cc/snFbR5HoCgnLhw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406845; c=relaxed/simple; bh=4T4e+dBD9VZFscecYaj+M9GKfaZGdYPdiQhQKoI5Wvo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GddKxF1EPfxhCnpmo8smQHql7qzWW0Ix5sd9CH/zsyr6Y6gTerZD8zIMNxkmYben+XiUfdBfQpcY5MqOd69/wWS0TBwBHfYBhEOA4qz2gTgSa8FrGA8fBFEMb41wBY9i6TmO9yl03GAzxZE7e5mlcglH92tTKZAfQwxUlf4vR+k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=CTf11aBC; arc=none smtp.client-ip=209.85.128.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="CTf11aBC" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4955e865174so8594425e9.3 for ; Sat, 22 Aug 2026 06:54:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406842; x=1788011642; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Iy152RdCZfa3BuEh7IM6k3QBkRdl6kOpMlXoFvVNGkU=; b=CTf11aBCB9qdAQK4M42Jj2ru/GpO9UgKXxwnDCvOZhvRGG1IR3VYn39JJTZ/KjlXpY LGLGOvCjOg5PiMMmnibk7XGvczH4Mi/ouhNLKKRf1Mtcqnry2kgiOcdvsDddRVyNWN39 no/FEI/i9XEzfLtuY9GNwOU5t/qZ12IrfnDot8Kslzze5i2p9Oj34T3zfKiYSLZb3Qmv oMokwMFYIUxeMXXrY0+86kEiFd01Sfzc80GU2oVyZZMZmZNFAD7wo1JQIQpvSvr0RNfk qy8CHe6LqianSXNBK3h9ug0h+0mafoA1CZ6KPptEUs1NSgrAvd9RxfVZBPalV7aIWBm8 r9jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406842; x=1788011642; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Iy152RdCZfa3BuEh7IM6k3QBkRdl6kOpMlXoFvVNGkU=; b=qnusSxGCIevq4+8AIhq13vPYRwRnualYey5P/oKH/4w4Uq/eXTK8h3N8JAjq0bcZ94 YVBqLQxyxQ3E5o/QZZ5CTM83GRKvTys07Ig2+jMbqcjon+cJoBWTT5d7dhb1RhV2cykr Xhwcg81zzhS4BKLK6p9mMpCbaeqluk1Pf9tOrRMH8jInEIDW1Y7HjOkjIUJYs6zf5lV7 2+XnO3o1u1QRqjjspN0ZlwsrS4NbxW0N2UzhcNNhSLgSl5yF0bRkMYLFk8wATA137tA+ xZ9x+AkERXj0TTiake9zNSYVl1rHe37+TCbgO2u3ZBsbP3ZmPchOLCk+5CgLoNRjZOMn 2CYA== X-Gm-Message-State: AFuF++nLWPu6He2yyLnA7zjym9Blerlk8INKgSqBr3UYQ2fGRN+giACk Md4Z92lEQcrj6E2DaV/YNy7MC5kUlPb02JletmBwuOEJigsIsEutFlsj9PfsF0xSzEL1tLcVA0f 4QfuwmNohPaPc+e8vV9IG0pEHoI6CJcAqjBgFVFNm4mvhFJpymKI4Rfa4/so+BpMrC0zTaSbgSS jBkwS+MljtpyeZ6keaxb4YdnpC0mcfCNNeuA== X-Received: from wmbd17.prod.google.com ([2002:a05:600c:58d1:b0:499:c849:1518]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1552:b0:499:49f3:77b1 with SMTP id 5b1f17b1804b1-499c19ad953mr53970335e9.3.1787406842383; Sat, 22 Aug 2026 06:54:02 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:23 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=2988; i=ardb@kernel.org; h=from:subject; bh=B9vd29okea5ocqXwmV5m+3LPo6WPI7iW8XzHP/zdLDo=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5dVpa7gmF+04XHXv0Ldtx/jvSMk88RI+HWdutLtap Wi5rVx7RykLgxgXg6yYIovA7L/vdp6eKFXrPEsWZg4rE8gQBi5OAZjIpTSG/xktVZWhn+fx1iX+ bvjnnZkok/3UO9r1gvf07LoHPi0HXRgZDsyUzJr3gL341aYFm75+/P88IPjPqYkbik+7C0pNn/V YjA0A X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-12-ardb+git@google.com> Subject: [RFC PATCH 1/9] mm: execmem: Add API to split an existing execmem cache allocation From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel In order to permit the module loader to allocate MOD_TEXT and MOD_INIT_TEXT from the same chunk of memory, add an API function to execmem that splits an existing execmem cache allocation in two. This will be used on arm64 to avoid .text and .init.text being placed far away from each other. Signed-off-by: Ard Biesheuvel --- include/linux/execmem.h | 9 ++++ mm/execmem.c | 44 ++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/include/linux/execmem.h b/include/linux/execmem.h index 7de229134e30..59bd862cb061 100644 --- a/include/linux/execmem.h +++ b/include/linux/execmem.h @@ -178,6 +178,15 @@ void execmem_free(void *ptr); =20 DEFINE_FREE(execmem, void *, if (_T) execmem_free(_T)); =20 +/** + * execmem_split - allocate space from an existing execmem cache allocation + * @ptr - the existing execmem cache allocation + * @size - the size to carve out from the existing allocation + * + * Return: the address of the carved out allocation, or %NULL on failure. + */ +void *execmem_split(void *ptr, size_t size); + #ifdef CONFIG_MMU /** * execmem_vmap - create virtual mapping for EXECMEM_MODULE_DATA memory diff --git a/mm/execmem.c b/mm/execmem.c index 084a207e4278..6db0c1d82a9d 100644 --- a/mm/execmem.c +++ b/mm/execmem.c @@ -439,6 +439,33 @@ static bool execmem_cache_free(void *ptr) return true; } =20 +static void *execmem_cache_split(void *ptr, size_t size) +{ + struct maple_tree *busy_areas =3D &execmem_cache.busy_areas; + unsigned long addr =3D (unsigned long)ptr; + MA_STATE(mas, busy_areas, addr, addr); + void *area; + int err; + + guard(mutex)(&execmem_cache.mutex); + + area =3D mas_walk(&mas); + if (!area) + return ERR_PTR(-ENOENT); + + if (size >=3D mas_range_len(&mas)) + return ERR_PTR(-EINVAL); + + addr +=3D mas_range_len(&mas) - size; + mas_set_range(&mas, addr, mas.last); + + err =3D mas_store_gfp(&mas, (void *)addr, GFP_KERNEL); + if (err) + return ERR_PTR(err); + + return (void *)addr; +} + #else /* CONFIG_ARCH_HAS_EXECMEM_ROX */ /* * when ROX cache is not used the permissions defined by architectures for @@ -459,6 +486,11 @@ static bool execmem_cache_free(void *ptr) { return false; } + +static void *execmem_cache_split(void *ptr, size_t size) +{ + return ERR_PTR(-ENOENT); +} #endif /* CONFIG_ARCH_HAS_EXECMEM_ROX */ =20 void *execmem_alloc(enum execmem_type type, size_t size) @@ -511,6 +543,18 @@ bool execmem_is_rox(enum execmem_type type) return !!(execmem_info->ranges[type].flags & EXECMEM_ROX_CACHE); } =20 +void *execmem_split(void *ptr, size_t size) +{ + if (!ptr || !size) + return NULL; + + ptr =3D execmem_cache_split(ptr, size); + if (!IS_ERR(ptr)) + return ptr; + VM_WARN_ON(ptr !=3D ERR_PTR(-ENOMEM)); + return NULL; +} + static bool execmem_validate(struct execmem_info *info) { struct execmem_range *r =3D &info->ranges[EXECMEM_DEFAULT]; --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 333B73BFE26 for ; Sat, 22 Aug 2026 13:54:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406848; cv=none; b=Jz2TZHUwWfnVEXwLapCD3GLWUtj+MbHncj23o2Zapm6V1wTBqSu5gd8Ik8LuDmfghwLgRPvtpshJxOSlWEc4NSWH09SzX4MayFhy2vd7n+CkTvoOu1sNFIpWOc/APRIx9l1U5WXt5LUrA3TGkYWSdye3HSMGd7ZY1AQQ2ZmLKGE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406848; c=relaxed/simple; bh=eyMdQms5h38vSRYfAWR0WcETsyXaqJ5IJyvglyGQo3c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hAww4FnxjswBl7T+kp6B5U7CrP0voRNiverXq7jwwEybswgYPH3FWjzCJPF7QmQTk5AZP6wVEuxY531dawZCbfzXMj/TTX74+JY+ZAl3yRwVRDaR2ALSDkxW3uUpqX2F26IIyOeyv1Z6Qy69bLSfhqWpiVWiRqCXJQBKqm4VB0w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Y5lsYzjc; arc=none smtp.client-ip=209.85.128.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Y5lsYzjc" Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-49564d4b849so6805735e9.3 for ; Sat, 22 Aug 2026 06:54:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406845; x=1788011645; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=hkCM63s99i91p1PpHDumOCyyQdfuhx7OwD6Jd3t1Lq4=; b=Y5lsYzjcfdqLMLXLcZZQUwStHswCMeFGu02DpVcS1iXPH1gVnDy2xzSgULZF8sxmk3 n8XGkg4CPwyB51MEmBvZ2H+clgoEF/X9hnSa/SX8iyZRQ/UR4mtQb5qW7T0F8YUJZvZZ BBOFL365Ua/UQkip4KtvXdAYSgA8G6LF1uPOrz9RmVVO6IoURnc8DTuFMOqnkd+onjhx ZC03DV1kEbefpEgKoGujQD1KOFClhkJJTbdhIltayq8QWfw+bIAxcjROXmf5fiNeVJYj CaXjPGjVKOvOvTSYNmcmPwbeTDdhdZUjVoCb76tgyULYwBePR7wRws0v7Sb6wIEHGKQy dvOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406845; x=1788011645; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=hkCM63s99i91p1PpHDumOCyyQdfuhx7OwD6Jd3t1Lq4=; b=AU++hFa5S1cZLnbrNlFGQQs4ZIYSk61cdIkYcgYcHTXL18tCftYvxVVx3/LrwUfl4s sjad9u+ifT3ulrpeiXFy4bmrPHw3adi4cToMVBcZ0m6ICoYgwKzU9sZQ8q8JN8VU9CYn Bu7xLdk0kVar3Kk2nXc+c06VNnJacwuMqNBFy1Aem2CLCl/dk6VwqcSS0WEfpDkxtgiG HDR1SN8blwd8E/jG8bgDoH37Mji+uf4uDFGvmVjrkJyouXQ6X0WpPmT/MFynStQYuy8X FeHzTPVI6H9Odvase5OeawkMsE1G2BVcZsOXQkd4WdJ36UJMTVKLkb9Ms2eXkY//k/Lo o4ow== X-Gm-Message-State: AFuF++mk4kl5A13cR4d1oqBpMns7GPL0lVLWfWCd/XCeQ4ZSzBC01HGi lvxjtub8aMEmZY7Czr0JQIij7glFcvr9Sr02+wE+mwCnP9DkzNFkPjusnhK3VgBHxI080H67zfM qRBPVpTncviXF82/e3UvEC28wiYeHW+OgLuE4SelSWDoK7Nr8b9RfZ39juSuftyP2EKTka8Z92k s8Th0MO6BIzzhScj80/o7fhQtlgDJo1tjtcg== X-Received: from wmsk20-n1.prod.google.com ([2002:a05:600d:8494:10b0:495:5b3d:ed8e]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4f87:b0:499:5a50:b022 with SMTP id 5b1f17b1804b1-499b830d220mr157713495e9.3.1787406845321; Sat, 22 Aug 2026 06:54:05 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:24 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1777; i=ardb@kernel.org; h=from:subject; bh=P7ZGJgEcYK0LKyyPgb8fkUAxKeezm6n7kbgZPbKu2yU=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5TWxr2KyTbZTbOpLO1+U67/Xi9h1eWvb4iPcl4w+S bRJZ7V0lLIwiHExyIopsgjM/vtu5+mJUrXOs2Rh5rAygQxh4OIUgIms3cbwv5ahahdT+LH2cO82 t1yDecoKnrvaJgjtU5h+/th0FT1bD4Z/Wub5/n96de+wmHSaPL+t1b4gf0nC0eXNz1JN5Yqla1c yAgA= X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-13-ardb+git@google.com> Subject: [RFC PATCH 2/9] mm: execmem: Allow huge vmappings to be avoided for execmem caches From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel Only recent arm64 systems are guaranteed to be able to manipulate the permissions on live kernel mappings that may use huge mappings. Older ones can only do so on live mappings that are mapped down to pages. In order to make execmem caches work on arm64 despite this distinction, allow huge vmappings to be omitted when allocating the caches. Signed-off-by: Ard Biesheuvel --- include/linux/execmem.h | 2 ++ mm/execmem.c | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/linux/execmem.h b/include/linux/execmem.h index 59bd862cb061..b04926f3fff2 100644 --- a/include/linux/execmem.h +++ b/include/linux/execmem.h @@ -48,10 +48,12 @@ enum execmem_type { * enum execmem_range_flags - options for executable memory allocations * @EXECMEM_KASAN_SHADOW: allocate kasan shadow * @EXECMEM_ROX_CACHE: allocations should use ROX cache of huge pages + * @EXECMEM_NO_HUGE_VMAP: cache allocations must avoid huge vmappings */ enum execmem_range_flags { EXECMEM_KASAN_SHADOW =3D (1 << 0), EXECMEM_ROX_CACHE =3D (1 << 1), + EXECMEM_NO_HUGE_VMAP =3D (1 << 2), }; =20 #ifdef CONFIG_ARCH_HAS_EXECMEM_ROX diff --git a/mm/execmem.c b/mm/execmem.c index 6db0c1d82a9d..5790d4a8532a 100644 --- a/mm/execmem.c +++ b/mm/execmem.c @@ -276,7 +276,8 @@ static void *__execmem_cache_alloc(struct execmem_range= *range, size_t size) =20 static void *execmem_cache_populate_alloc(struct execmem_range *range, siz= e_t size) { - unsigned long vm_flags =3D VM_ALLOW_HUGE_VMAP; + unsigned long vm_flags =3D (range->flags & EXECMEM_NO_HUGE_VMAP) + ? 0 : VM_ALLOW_HUGE_VMAP; struct mutex *mutex =3D &execmem_cache.mutex; struct vm_struct *vm; size_t alloc_size; --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2C7C3B101C for ; Sat, 22 Aug 2026 13:54:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406850; cv=none; b=OFrMuHBc+HT93esvOU5YpkwnGkF5BW1z5Fk72VBg+TEN+9YrKxuQQTPtSdSZQlrdcV4Wtv3skR81ckyHl6FV20s/WZ0juhOP1n/+soW2CTSo5bFYXIPhXnkhKS4SwSlz3P76UKTIn3/kj9LnQwfV1tl7pPmL/CAccasz+l0yOA4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406850; c=relaxed/simple; bh=AinIhOYRxdY9RQ11Fott/8QSuWqVe/WuXNQsPZeV7zM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TJz3mCfXjrNfYb3lZQXru2x1cPx9OPF7ynYnUP93N9z3E/k3UfHxOhrkO+VB1MOubqDRm4+mjlmr9IHY6XNGAC3V7YQwLU1CUODtg7i4vnZTQDzqlV30w49H0eXIug5+sLUbkxW7ku0x8PblstJ9hrVBrFeyS0uD2qHURFJ/ZYg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=Q+F6MFYP; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="Q+F6MFYP" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-4994d67d0e3so12756775e9.2 for ; Sat, 22 Aug 2026 06:54:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406847; x=1788011647; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Ei9aAhCyyRq9nczFsrb/oQ6US+9hvk5Rs5Wuqs8mBgQ=; b=Q+F6MFYPnjjZXTQBjiiGUuu8ifKu+d2kjpTf8wEmN9T/27lQ3bX+8jFbm/lSV26u/8 Y7rLXnkEqXCKBOYXRtXhWbaBYqN9kB1kTDgS27DvF0KMlCq5LZqFt3NK41HTgdAEuZmB hD/zt3G4STNdV23XqM+GJ+VyL+ku3fai32Cxft1XBdWtgL9O5jqtzFKBSVCdTpAMXEYr 93lVOgx0QwUXbZSutMimuDsVPNzwAa0i+whuL9+RsTIsNUNn4ElIMjzxz9T2Msid+zGn 3CSb5ym2iWljxZE6uFz/DGKJu1xa6uJUheAsiBWej9qgi/FRRj7ZSSUrac8a7AMUxbv5 zXxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406847; x=1788011647; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Ei9aAhCyyRq9nczFsrb/oQ6US+9hvk5Rs5Wuqs8mBgQ=; b=bK5+c5PescPXa3eXYFKafJCvKX/ojRQWJ6iQtuldsinGONGigcqL03K9XsbHo1IPFJ 8aZTP3SWwzl/jn+CSWdIGu5MEYHDw/kOlXj92xahbxZ1sHSvK3lkmbZ0hbq8sypVD3AM llOXnqMSByT93P7XVciGONomcxN8393krtztMzsiEmfVT8qlkniaZzdEoEt57cPnhX0S 1a7frjjR/vrFTX5Xk2bTMmlJGiTr/Ze9rLkNbUcFKWKLjoiEbJaZUP/hec+BWEhpZQNr NdGxsn4breRMzPra55LXJ3prBuD40q80JiFmaTSJwUL9cmAP2Earity9XV16Jja0uAP1 rbuw== X-Gm-Message-State: AFuF++leT3j3o2Yau07erBwuHdtfsZRzLdFVy93QCT1xYubK60n9kUcI B7ijWfptSlg42liznDWCGQe3r5xiHvSLFMli3OiAA8X2cuwgRwMCRirvZn96IovsJ/KHWvbtXCg B41MkcDKMK3PVztaCl4Sbm/H1P9IwqInh7JgZrwv23/cXR3JmyUOBMuMyZGUjOItuyn512Dae2B VnCOegRCDmKkwY1LExGlw0xOZprtxnQ36MVA== X-Received: from wmcu3.prod.google.com ([2002:a7b:c043:0:b0:499:8f0d:36d6]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:8b77:b0:499:48bb:417e with SMTP id 5b1f17b1804b1-499b82f4163mr187118595e9.2.1787406846628; Sat, 22 Aug 2026 06:54:06 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:25 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1141; i=ardb@kernel.org; h=from:subject; bh=LLSSaN9rhZ2F3aT4P4AsB5UNc3JBgAb9PUajizskM3Y=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5Y0AZ4svS9ISbTaf6Vvbffb640AuEdFH514lyFxeu vB339++jlIWBjEuBlkxRRaB2X/f7Tw9UarWeZYszBxWJpAhDFycAjCREiuG3+xHy5/ozft6vo39 a++HnWc27J26lnlODVv1x/cTz/MfferGyHBrod6fpd6OR87MNvD91aMtcLL+0Su90/UXLE4ohsc 1yXMBAA== X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-14-ardb+git@google.com> Subject: [RFC PATCH 3/9] module: Place MOD_TEXT before MOD_INIT_TEXT in enumeration From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel Reorder enum mod_mem_type so that MOD_TEXT appears right before MOD_INIT_TEXT. This will result in MOD_INIT_TEXT being allocated right after MOD_TEXT when the allocation logic iterates over the memory types in enum declaration order. In a subsequent patch, this will be taken advantage of, by allocating .text and .init.text together, and freeing .init.text by truncating the allocation. Doing so without this reordering would likely result in more fragmentation, as the truncated .text allocation would be followed by .rodata and .data/.bss of the same module. Signed-off-by: Ard Biesheuvel --- include/linux/module.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/module.h b/include/linux/module.h index 7566815fabbe..0336a46733dd 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -316,10 +316,10 @@ struct mod_tree_node { }; =20 enum mod_mem_type { - MOD_TEXT =3D 0, - MOD_DATA, + MOD_DATA =3D 0, MOD_RODATA, MOD_RO_AFTER_INIT, + MOD_TEXT, MOD_INIT_TEXT, MOD_INIT_DATA, MOD_INIT_RODATA, --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A72F13C5DA6 for ; Sat, 22 Aug 2026 13:54:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406851; cv=none; b=f5H2TIjkvoJxt0zyAJFKGOBurGdrZbaBsJQzC2J/IT/Gauhb1EmLj9WJBmmSOnM8+3tRViq92bfrIz337OHUzyrzBDdlgrtfxFLAnPUuRl7V94+XvtNE1aI33CU9UBuW8BmQ0WkaUE2SAQ/Pi9EJJLb2diEcs3MZlJCfnwxiS5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406851; c=relaxed/simple; bh=yELrb/Sn4lo7UMYrT7w3YjKzJs20THaExKEmg90KpcI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=J6j2gVbjak6oj/FTaPLt52XTFPXwAQWonN0EbStEWpXzhR8toZRjVYJkdGMoGW7V1vxz+OPDp3JbzqZ8BF1EIrR3DdzNHLxhiJ0V1hxuZPAO6bHarN7DE+Vg8x5dw5KMJqoC3rjmuGWOEwLG1l29rg5pVnkzq7j6eQMs6aIMvBM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=ajfLccfz; arc=none smtp.client-ip=209.85.221.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ajfLccfz" Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-47fe23b5acdso1549917f8f.0 for ; Sat, 22 Aug 2026 06:54:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406848; x=1788011648; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=3C1MhcgCYBzARL/+z1ptrjz40O26zol1QO0uE2euMIU=; b=ajfLccfzb8aufZ93lpS12KFsEBz1a/lZsL1yqyr0/HMIvDSBamuTL+LGYhOx9pBNbk K1pirkT3tQwPO8v1WYsWEm7dw7ZfY/Of5tZkqMsz2YEVFK/rtu+9YE5wZX+17XcrfAMC MkhEQub5GCxrKCFSQ5zd/WFT0jrtfbnXOr4WhEUHWlQQ8Ns24kbKRxCxz60zlDrHPM/U 4TNgyBe12z6G4wNKMy82hpmdtl2KaKIgMWUvjGtdM8DtKYXx6hf/YVf8eQ6NNHwuk0qO 2Z2/Gv+YvtIdB8q5bVAt3ZK3CGaNbnK5D0j85Y66QKbF16QmmxJ8TcAGeZegjp4Om3YC Qd0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406848; x=1788011648; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=3C1MhcgCYBzARL/+z1ptrjz40O26zol1QO0uE2euMIU=; b=LRmqIGIeCwT7s6FPx+v4mVcKqKKfoJJjmodN8Nl4g8c3mZj2U0fFv7P4vx0FBoorI/ vI9JzAmL3uOsrMzUAls6thGa5UYruuFb0Wae4y7Lundo+c1Ru7lAvFzDxmOL7iwYQUQF 5/1NKaZQpJ4PcYHEamBKKfUh0y1viS/AdDRU00wMVlA+1wGhXeRNUeEFgZAdWMLK1rKd pxgNGvhuXGC0AYiNEKvNEp5f9mk4Lt2C+uPwBl00A6m16pbIXCmqN9YqDUEUYaY3iBH6 eKqzN03Qaa/dSkx6nmNnAoh1eDcX/ECipQikcVzJnUAgLc18Log3YA/mFyZ6U+2O9XHA 8apA== X-Gm-Message-State: AFuF++niQuuWVfqlUG3KW8UpZzK0XQyQEaWrGCWzdiZg6DtmIu3+eRaI eoo0ia4bnYOabK7Xa8wHV99t5iCU8KeSHd96nih7l9ktnMMus2QgKPOc3S7EdW6qzy+PPNFxV5H fGsIo69EvYSJKh1Wp131az5FjTQW4MIU7x1cvd7oPrn8Tq1atbVJLueOV+6js5zV0nC2zgGbJ+6 z6B8U0Or8zDBP55V1h/9omGWQk6Zq09h341Q== X-Received: from wrnk3.prod.google.com ([2002:adf:e8c3:0:b0:481:5a0f:19b5]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:310f:b0:47f:7129:e30 with SMTP id ffacd0b85a97d-482c0b976f1mr17563678f8f.11.1787406847588; Sat, 22 Aug 2026 06:54:07 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:26 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=2204; i=ardb@kernel.org; h=from:subject; bh=2CJ7XIW20mRvuSe13JPdhhevFvLjPgwtnqW6fGhR0pc=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5c1bi+7sDNh4oOHy8XMHks1ZWx/c9LM5qpAednXj/ pol76fv6ChlYRDjYpAVU2QRmP333c7TE6VqnWfJwsxhZQIZwsDFKQAT0dVjZGjsanuobS/bwOzn INDJt9ssjUtyEdfbFTGrcj54/RWdJsTw31v4rEPQ3sLVG+ati7dtnpxtEvm4wabQeZJex247NZX 3/AA= X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-15-ardb+git@google.com> Subject: [RFC PATCH 4/9] module: Allocate MOD_INIT_TEXT from the MOD_TEXT ROX allocation From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel When execmem ROX caches are used for module text and inittext, place them adjacently in memory, by allocating space for both initially, and splitting off the space for MOD_INIT_TEXT as needed. This avoids the corner case on arm64, where .init.text being placed far from .text results in a lot of complexity wrt indirect branches and PLTs that we'd prefer to avoid. Signed-off-by: Ard Biesheuvel Reviewed-by: Bradley Morgan # kernel/ --- kernel/module/main.c | 22 ++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/kernel/module/main.c b/kernel/module/main.c index 46dd8d25a605..2d6213496359 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -1342,7 +1342,7 @@ static int module_memory_alloc(struct module *mod, en= um mod_mem_type type) { unsigned int size =3D PAGE_ALIGN(mod->mem[type].size); enum execmem_type execmem_type; - void *ptr; + void *ptr =3D NULL; =20 mod->mem[type].size =3D size; =20 @@ -1351,11 +1351,25 @@ static int module_memory_alloc(struct module *mod, = enum mod_mem_type type) else execmem_type =3D EXECMEM_MODULE_TEXT; =20 - ptr =3D execmem_alloc_rw(execmem_type, size); + bool is_rox =3D execmem_is_rox(execmem_type); + if (is_rox) { + /* + * Special case for MOD_TEXT / MOD_INIT_TEXT: allocate the + * latter by splitting off required space from the former + * so that they are always placed close together. + */ + if (type =3D=3D MOD_TEXT) + size +=3D PAGE_ALIGN(mod->mem[MOD_INIT_TEXT].size); + else if (type =3D=3D MOD_INIT_TEXT) + ptr =3D execmem_split(mod->mem[MOD_TEXT].base, size); + } + + if (!ptr) + ptr =3D execmem_alloc_rw(execmem_type, size); if (!ptr) return -ENOMEM; =20 - mod->mem[type].is_rox =3D execmem_is_rox(execmem_type); + mod->mem[type].is_rox =3D is_rox; =20 /* * The pointer to these blocks of memory are stored on the module @@ -1368,7 +1382,7 @@ static int module_memory_alloc(struct module *mod, en= um mod_mem_type type) * *do* eventually get freed, but let's just keep things simple * and avoid *any* false positives. */ - if (!mod->mem[type].is_rox) + if (!is_rox) kmemleak_not_leak(ptr); =20 memset(ptr, 0, size); --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 92A9B3CA49D for ; Sat, 22 Aug 2026 13:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406852; cv=none; b=BLjwC5bh74i0hGUBSJnc1gg3ypRehT97pf2qX4g5aHyYU0sCcs/PZoHr1vhOqlRonpg0n/MDJP9LJnDRmjdnqfu0QDYjwd7fFYZYBw3w5VkctqeTsi/VdkApkGeBJxzagMFeC4gUfBjRCrbZIhAbedIGNQwDj3xC0U2e/EoOjhY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406852; c=relaxed/simple; bh=uiIKWGpvaKJ4qxRkg9sBdwn+FBNvv3fpEqROSd7N37M=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KHIDs5PM+UhvgdiASRHScIFPigMyIKJxt5mqCJ09GRFoJIp3Iy0qt8zRSNYiibL46OTRbftWHvWiKXeq0SHA0eAAd/O4YkMdzbsuqZHnXEU2pW8O5YVnjS8aQoTEVDwHEC1kEHwaoG8YEoB1RzUxd04WGT2gJCkzA1huaU5ijnM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=pOsNMLzk; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="pOsNMLzk" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4957287363bso10400315e9.0 for ; Sat, 22 Aug 2026 06:54:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406849; x=1788011649; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=kA/leMB5Bml9VvmxH4fPbAWvPl/SN0OCbc+8KnqiWlg=; b=pOsNMLzksKLk/4tYX+baqZH91VmGsWyitbrKqAVGzUFyST0WlK5k8RoAb/hRww6A4k cRz/EhzkxEDURp4fE2xP8tOP7V/SSeGwpVc4hslk7Lc6WZA4365qeBvI1jE4oeqvlkp0 uHyUYb+34NPFJ2nzm7gGRUzxKS05W+KMqaGUCRiLmDrFjTHMYJgYtSDA7wmDRi20w7dW lAUnuy+UwjqrnmEad3MnvqAk0SsJVtDmmNfZIDVrK7+EpW8Zu6rhij00HXEHmT68y/Ze RhDj4ecj2JVOtGlPWe0tHKBzQY0gMgWJEZ0m+3ufz5WmP2aTOlzbxyYy1p4kLs0JNlys zNdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406849; x=1788011649; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=kA/leMB5Bml9VvmxH4fPbAWvPl/SN0OCbc+8KnqiWlg=; b=Twsi2SSVcAaZlWDQ3u4KsLJ+hVB4x0cT1cFzswVZLxIZGW0+C0/3sb8jBUqMakfYk5 5f50WgtIQNUn0cbPJ9TvDOLjwchjIv/ZQBK2o68nsRqeqETDGRne35XzTg2mNjH1JVir QSlTieUTIT12GFN96wenJX6WwaxMDZeCpbNnu+RxucO4mKebPplH+N/5/x2wZw95s73S bnMtqQrZfV6bkpnAQ7TyBSTvYw2ZEXtzzHmEPU7LyFip+eYWHgdkm1Nkcogklx9XmcJJ icay0qHvxY3YFqMtEBu6nZpEsiywvFE6LAx8WSViBy9Hw8mnH2SsEDVAjHNU2BrzrjBQ D02w== X-Gm-Message-State: AFuF++m8fgPF2B9gHL7ao0DTwr+7oQxYnO01yufhK1TSEqATFgYJet1M laZfdtH5LYVF18/pyRqL2IrlxJIx6xavdGpoJO/4reCtFP+Ii+DPaWO2OM5zS0tvynzxLfMMH7c ddZ0s5bNQDJR/ElBEc851lmmDUjekptPa3poojfsU8S7yz/7eUkx1YMcmGjwLY61bUG51sn4Twh y29oKqr5ihrPgAlDslrHtiygx+98qfmWxjYw== X-Received: from wmlu19.prod.google.com ([2002:a05:600c:2113:b0:493:ae35:2761]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:3584:b0:499:8777:ccba with SMTP id 5b1f17b1804b1-499c19f3a09mr55389195e9.12.1787406848610; Sat, 22 Aug 2026 06:54:08 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:27 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=1748; i=ardb@kernel.org; h=from:subject; bh=plFvUlms3IX09TbA06fuB9Z3i2CHbmXiXP7osp2wqLc=; b=kA0DAAoWMG4JVi59LVwByyZiAGqJqduhaXhTLES9U3wa8QeLoLCFbLjTooS/ld4OUN8Ev+zVT 4h1BAAWCgAdFiEEEJv97rnLkRp9Q5odMG4JVi59LVwFAmqJqdsACgkQMG4JVi59LVxbUQEAwLd0 PDSvV2zyQlqIymz5n+L53p/Botvaje9PasDJEM0A+wcjClUJb3hpwyZuyoMYZ/HDrLzn0R7+g1/ X39juar4F X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-16-ardb+git@google.com> Subject: [RFC PATCH 5/9] arm64: mm: Permit permissions changes on huge vmappings From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel Allow permission changes on huge vmappings in cases where no splitting is needed (i.e., the region is aligned sufficiently), or when the system has support for splitting live mappings. Signed-off-by: Ard Biesheuvel --- arch/arm64/mm/pageattr.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c index bbe98ac9ad8c..20ff9cb273c1 100644 --- a/arch/arm64/mm/pageattr.c +++ b/arch/arm64/mm/pageattr.c @@ -169,8 +169,6 @@ static int change_memory_common(unsigned long addr, int= numpages, * we are operating on does not result in such splitting. * * Let's restrict ourselves to mappings created by vmalloc (or vmap). - * Disallow VM_ALLOW_HUGE_VMAP mappings to guarantee that only page - * mappings are updated and splitting is never needed. * * So check whether the [addr, addr + size) interval is entirely * covered by precisely one VM area that has the VM_ALLOC flag set. @@ -179,7 +177,16 @@ static int change_memory_common(unsigned long addr, in= t numpages, if (!area || ((unsigned long)kasan_reset_tag((void *)end) > (unsigned long)kasan_reset_tag(area->addr) + area->size) || - ((area->flags & (VM_ALLOC | VM_ALLOW_HUGE_VMAP)) !=3D VM_ALLOC)) + !(area->flags & VM_ALLOC)) + return -EINVAL; + + /* + * Disallow VM_ALLOW_HUGE_VMAP mappings unless the region is PMD + * aligned, or splitting live huge mappings is supported. + */ + if ((area->flags & VM_ALLOW_HUGE_VMAP) && + ((start % PMD_SIZE) || (size % PMD_SIZE)) && + WARN_ON_ONCE(!system_supports_bbml2_noabort())) return -EINVAL; =20 if (!numpages) --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 51ED23CB2DB for ; Sat, 22 Aug 2026 13:54:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406854; cv=none; b=inBNCFAcRMsCFENaxnHCp8+UIZ7rA+2S6VdT4q+j5ckz9yvLkaZkysuc0sjWIv23JW/jxSbwCNmtRNIgvQ4xtVRwoQvWAs7N603K1OrzvwDvwZgQLTS/jOYgYMd4lJ0hOf5MdjaZuG2uPNB0yTkeTzyYcE3MuVoYApUirGAn7sw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406854; c=relaxed/simple; bh=uti0HuVKkz9KXrAZ/9jbGQ5MFKh/9sEgEM+VEybzHS4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hBN9+Jf0fL7GkmI082N+tD6BV+Ax6PzDuGPKsM+dxvVh404/LZUkMvojRop5k743g+3ur1rlOVO8ITMBtIoMlOQiCTWcYNPd6aM4RYrmlbtG1ccKBVKn/36Vm2n4900xDsHpcpNycDGzWF3+18FRtZqazqiTp3l3DP+m6c70JVA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=h7ZLp8+S; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="h7ZLp8+S" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4954dcd6131so17149715e9.3 for ; Sat, 22 Aug 2026 06:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406850; x=1788011650; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=NcGHYE7YHIQuleStFkafOmsPgUJAwjDqEsHvPsytY4A=; b=h7ZLp8+SUOVvwgkfjIFHLhFmMRYyINfg03d6Ep1sTiU1r1QdCB6sZJsgYz538IELgc Sn1yk7/JUqUqJEQLtGlBFeLXWa/3G/iXeJHQfyHLkYyf4qvKK+Af7FOozK7B5eePXcEq G71EVLGub6mPaxSU9UltZVekkKEqTTIR+cv6Tkduaga8vAbJmZWce2fxstpKdz99D8RM GtqMn+DF1ql4+Bt/mMwso1u8c8saX0dLwY94HTcT3NFJCS7/6HosOjRDaD0Vwv30MBHL a7OlSswQUc8qmoivAKJjLZ3R23wk2DwC6cAvIQqYyb98mYZhI55sqzRqKIfJviaelpae aGfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406850; x=1788011650; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=NcGHYE7YHIQuleStFkafOmsPgUJAwjDqEsHvPsytY4A=; b=E6zXAdkYaixG+8MMpNAvjyEwJxVI6uCU2N/JGn1c5sLv3vDIh5JgDaB5VEtlKnNvBf dMA/iJOfXdnubeP+SXPxSna/Hq7fRJcDqk4pVRJiTwcafq/MoP1UeJeqEbDiiR1WmKcP rclCTYgX4OytlzsqE+gJ3McARkawApf3bRIUNI32kKmkz541TvB380MNiBeiAIYVComj +RonTAtTNoEZHnBiPg0S2uRDUk5gNDhu9UdWBdjC2mPJwo3NPGNjtMJNINPfuIRmt6yo 00eZf1GwIb4QcA5a+FElhT208HQgYSWoc0ZXPknuOb+7wmRkff5gpNR+YT2wyVmIA5OF 1t/Q== X-Gm-Message-State: AFuF++keIsqinZp8Dkc+0Pc7dwX5OCGTeMV45I5o+DEyV+bjamFn7k9H W5ntcjeU3y2apg6JaiL2Xd6byWw2g8xZPdBfMZTjnoIqLNhuA3Pf67AWwxVp2brcc5F9ExyC0KD hwn2Cm+rObe3rbNg7GlMUjvtjh1XAPekomNOUif3+2RWqQ4jJE052Pfqdzofdio9PpF40RlPeOO XTgqPww2AXIGInY0BVtbl2NsHQATNHJgeY5Q== X-Received: from wmbeq6.prod.google.com ([2002:a05:600c:8486:b0:496:c04d:501e]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:8b77:b0:499:48bb:417e with SMTP id 5b1f17b1804b1-499b82f4163mr187121695e9.2.1787406850393; Sat, 22 Aug 2026 06:54:10 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:28 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=2053; i=ardb@kernel.org; h=from:subject; bh=ZgfBeS04NmMym7tXXunDIhp6k1y9y951qTGwH0jNq+o=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5R0+ffGnRqHZvHKiZ171Tuq2SUp6rLQk556gl5X1W i/DWes6SlkYxLgYZMUUWQRm/3238/REqVrnWbIwc1iZQIYwcHEKwERETjH8M/j158SWE9PaK6yK v2ytKl+pf26qsfCdLZf/86WJtv8K2sjwP73gZ/33YNcPt9OyeQsCeNaV807jMt4k6LzywRmh2Rv W8gAA X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-17-ardb+git@google.com> Subject: [RFC PATCH 6/9] arm64: Enable the execmem ROX cache for module text From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel Wire up the existing support for the execmem ROX cache on arm64, so that it will be used for module .text and .init.text regions. This will be relied upon by a subsequent patch in order to allocate those regions from a single chunk of memory. Signed-off-by: Ard Biesheuvel --- arch/arm64/Kconfig | 1 + arch/arm64/mm/init.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index b3afe0688919..080b97b0bbd5 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -27,6 +27,7 @@ config ARM64 select ARCH_HAS_DMA_OPS if XEN select ARCH_HAS_DMA_PREP_COHERENT select ARCH_HAS_ACPI_TABLE_UPGRADE if ACPI + select ARCH_HAS_EXECMEM_ROX select ARCH_HAS_FAST_MULTIPLIER select ARCH_HAS_FORTIFY_SOURCE select ARCH_HAS_GCOV_PROFILE_ALL diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c index 97987f850a33..e6c98045046e 100644 --- a/arch/arm64/mm/init.c +++ b/arch/arm64/mm/init.c @@ -531,7 +531,8 @@ struct execmem_info __init *execmem_arch_setup(void) [EXECMEM_DEFAULT] =3D { .start =3D start, .end =3D end, - .pgprot =3D PAGE_KERNEL, + .pgprot =3D PAGE_KERNEL_ROX, + .flags =3D EXECMEM_ROX_CACHE, .alignment =3D 1, .fallback_start =3D fallback_start, .fallback_end =3D fallback_end, @@ -548,9 +549,25 @@ struct execmem_info __init *execmem_arch_setup(void) .pgprot =3D PAGE_KERNEL, .alignment =3D 1, }, + [EXECMEM_MODULE_DATA] =3D { + .start =3D start, + .end =3D end, + .pgprot =3D PAGE_KERNEL, + .alignment =3D 1, + .fallback_start =3D fallback_start, + .fallback_end =3D fallback_end, + }, }, }; =20 + if (!system_supports_bbml2_noabort()) + execmem_info.ranges[EXECMEM_DEFAULT].flags |=3D EXECMEM_NO_HUGE_VMAP; + return &execmem_info; } + +void execmem_fill_trapping_insns(void *ptr, size_t size) +{ + memset32(ptr, AARCH64_BREAK_FAULT, size / sizeof(__le32)); +} #endif /* CONFIG_EXECMEM */ --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 961033CAA31 for ; Sat, 22 Aug 2026 13:54:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406856; cv=none; b=sfiU800Nv/kIoeNuGgx1ZRNM/2juUkNqetYxzZg/E3yjsgDyTb+Kk/bxLSYVZlg2GVm6S8frxBgli+GC27zSwPzzndeg9p9GYEu6AHQwMf/xdgFdrT4Ii47BSwYklDrs4XYQS+cu0PgTI/SCV8U/WZgElQV8W4Xnmi9srcrfCu0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406856; c=relaxed/simple; bh=uFMxGHqEPW0hVIsajDV+q6/mim0jiwVFeEB2HYV1iUU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=h/or5U+9RRUt4jDcDwnPAnT/0p4ovtYnXGmJEheLSrB9jox5k4jayGEfxyuBmcA0NWMkGRN1shdyzoDcLXkbLz3uK0afmsGvJh4kiC1+ggr8+dXONVk4vXArQ42R41rXSkgTkha2ACcNugQRPZc25iGaPgrZQRl2BdQUvQCo7BA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FruUrbuA; arc=none smtp.client-ip=209.85.221.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FruUrbuA" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-482a5e9400eso1362160f8f.2 for ; Sat, 22 Aug 2026 06:54:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406852; x=1788011652; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=uCGSy80EkADOYqRdnClxXtF6MDWdUJROODWOao0NQ9A=; b=FruUrbuAwb46nyY5h8NAf0SLadstvYO6lvl2ceuuRN7b6YFwdw6rTSOppjojW1JkYp Q/KGA2u55Lfv13HXkANm8y7G48Owx6oEgnzCn72+cTbfmIZ/j0WIb4KiiAZMtlz9kP6X yHG6wBh2pbxitXW6X4+e76LKm2P+lw+NIggts7aQaQCOrhc9e65X9PnUKe+IpzWTLaS5 7HMyPLFgcxweZA/DKcuw9awko9wD0DmqJ52PGeNSRgusTmdueI4k2gsF+eVmTjIF4BeN U8svjdE46rdYyVL2wDyj6N+XaobcWmvu2vcAeOrWvTz+w8Cm7KsY8117XEkputMoQ7KC 5ByQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406852; x=1788011652; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=uCGSy80EkADOYqRdnClxXtF6MDWdUJROODWOao0NQ9A=; b=SamSCpyl7CL4S0i5l5EHm2h7zqOrrDRV7pZm4FLOlQGnFlASUyzEPSfqPfSVAZu3BR SUCEYaqUfLerOCrT1+Rh1JyxqGoWdlqnHCFOP8JJr43b14ZfLH0cYaT/lXpPkNje3iN0 Jotbd8AkmCPwHSRIIrLlGwN+JkXHQ7bKyS1m6fcpE8YEl3kDCIQuaP6NfV35WUXeLQJy XSXJRi/5LIr89GkZVUBoc3lSiqOTJj78ZZUkJ8Hw75KmGrpJcEBz3lkb7zrAFQ3I1mWj OLvnCmGhYU9FwTowm6w7j7ajInsH96zzs1LXfHeXyeWDJSjKCjboFIImYvCInY4X3eSe riHw== X-Gm-Message-State: AFuF++lHBWQNcTk2ZR+8Su869QcAucKPB/dvwGat40VEMIt7om/hDjDc V077gOpGcho5y6iG3GZMYbgeJKzO+KmBdrgKdDdyIzXtaWBmX+GI3ef1l2Aycqbvny6UAZSvz3+ 7FMv0KpFAuxer+5oUNp+mGzzswtT2A1ZONJl9hsvpUicSEIksI7wlMkgbgZU8qis9rfvALwYgB2 S3aBC0SMmogLagq80q3yvoufu2h4zMNgVlqw== X-Received: from wrtv12.prod.google.com ([2002:a5d:610c:0:b0:47f:76fc:f05a]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:2589:b0:482:bf17:e685 with SMTP id ffacd0b85a97d-482c0b88f19mr19709898f8f.11.1787406851530; Sat, 22 Aug 2026 06:54:11 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:29 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=4579; i=ardb@kernel.org; h=from:subject; bh=BEHgSt5XbzXt4tBoZXsq5UPFvM43IOdkHorxrjqha9w=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5b2w6FXrAkIL3p777u+w3ijm62ajN4vezjfYEpZQl u7w99y6jlIWBjEuBlkxRRaB2X/f7Tw9UarWeZYszBxWJpAhDFycAjCRA0mMDO0W8Xtjiy5zcH03 q/x9b5GHzca9Bgf6WzaZLIo6+FaheSUjw3TVOf/Ejuza9aHbfV1D3U6jyXpCKevnz9LVlc13Lr4 txwYA X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-18-ardb+git@google.com> Subject: [RFC PATCH 7/9] arm64: ftrace: Revert "fix unreachable PLT for ftrace_caller ..." From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel This reverts commit a7ed7b9d0ebb038db9963d574da0311cab0b666a, which is no longer needed now that the corner case where .init.text is placed out of direct branching range from .text of the same module can no longer occur. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/module.h | 1 - arch/arm64/include/asm/module.lds.h | 1 - arch/arm64/kernel/ftrace.c | 13 +++---------- arch/arm64/kernel/module-plts.c | 12 +----------- arch/arm64/kernel/module.c | 11 ----------- 5 files changed, 4 insertions(+), 34 deletions(-) diff --git a/arch/arm64/include/asm/module.h b/arch/arm64/include/asm/modul= e.h index fb9b88eebeb1..79550b22ba19 100644 --- a/arch/arm64/include/asm/module.h +++ b/arch/arm64/include/asm/module.h @@ -19,7 +19,6 @@ struct mod_arch_specific { =20 /* for CONFIG_DYNAMIC_FTRACE */ struct plt_entry *ftrace_trampolines; - struct plt_entry *init_ftrace_trampolines; }; =20 u64 module_emit_plt_entry(struct module *mod, Elf64_Shdr *sechdrs, diff --git a/arch/arm64/include/asm/module.lds.h b/arch/arm64/include/asm/m= odule.lds.h index 0b3aacd22c59..0c3aea98e116 100644 --- a/arch/arm64/include/asm/module.lds.h +++ b/arch/arm64/include/asm/module.lds.h @@ -2,7 +2,6 @@ SECTIONS { .plt 0 : { BYTE(0) } .init.plt 0 : { BYTE(0) } .text.ftrace_trampoline 0 : { BYTE(0) } - .init.text.ftrace_trampoline 0 : { BYTE(0) } =20 #ifdef CONFIG_KASAN_SW_TAGS /* diff --git a/arch/arm64/kernel/ftrace.c b/arch/arm64/kernel/ftrace.c index 5a1554a44162..b56da24c1be4 100644 --- a/arch/arm64/kernel/ftrace.c +++ b/arch/arm64/kernel/ftrace.c @@ -258,17 +258,10 @@ int ftrace_update_ftrace_func(ftrace_func_t func) return ftrace_modify_code(pc, 0, new, false); } =20 -static struct plt_entry *get_ftrace_plt(struct module *mod, unsigned long = addr) +static struct plt_entry *get_ftrace_plt(struct module *mod) { #ifdef CONFIG_MODULES - struct plt_entry *plt =3D NULL; - - if (within_module_mem_type(addr, mod, MOD_INIT_TEXT)) - plt =3D mod->arch.init_ftrace_trampolines; - else if (within_module_mem_type(addr, mod, MOD_TEXT)) - plt =3D mod->arch.ftrace_trampolines; - else - return NULL; + struct plt_entry *plt =3D mod->arch.ftrace_trampolines; =20 return &plt[FTRACE_PLT_IDX]; #else @@ -339,7 +332,7 @@ static bool ftrace_find_callable_addr(struct dyn_ftrace= *rec, if (WARN_ON(!mod)) return false; =20 - plt =3D get_ftrace_plt(mod, pc); + plt =3D get_ftrace_plt(mod); if (!plt) { pr_err("ftrace: no module PLT for %ps\n", (void *)*addr); return false; diff --git a/arch/arm64/kernel/module-plts.c b/arch/arm64/kernel/module-plt= s.c index 7afd370da9f4..bde32979c06a 100644 --- a/arch/arm64/kernel/module-plts.c +++ b/arch/arm64/kernel/module-plts.c @@ -283,7 +283,7 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr = *sechdrs, unsigned long core_plts =3D 0; unsigned long init_plts =3D 0; Elf64_Sym *syms =3D NULL; - Elf_Shdr *pltsec, *tramp =3D NULL, *init_tramp =3D NULL; + Elf_Shdr *pltsec, *tramp =3D NULL; int i; =20 /* @@ -298,9 +298,6 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr = *sechdrs, else if (!strcmp(secstrings + sechdrs[i].sh_name, ".text.ftrace_trampoline")) tramp =3D sechdrs + i; - else if (!strcmp(secstrings + sechdrs[i].sh_name, - ".init.text.ftrace_trampoline")) - init_tramp =3D sechdrs + i; else if (sechdrs[i].sh_type =3D=3D SHT_SYMTAB) syms =3D (Elf64_Sym *)sechdrs[i].sh_addr; } @@ -366,12 +363,5 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr= *sechdrs, tramp->sh_size =3D NR_FTRACE_PLTS * sizeof(struct plt_entry); } =20 - if (init_tramp) { - init_tramp->sh_type =3D SHT_NOBITS; - init_tramp->sh_flags =3D SHF_EXECINSTR | SHF_ALLOC; - init_tramp->sh_addralign =3D __alignof__(struct plt_entry); - init_tramp->sh_size =3D NR_FTRACE_PLTS * sizeof(struct plt_entry); - } - return 0; } diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c index 24adb581af0e..6e5b488a219e 100644 --- a/arch/arm64/kernel/module.c +++ b/arch/arm64/kernel/module.c @@ -466,17 +466,6 @@ static int module_init_ftrace_plt(const Elf_Ehdr *hdr, __init_plt(&plts[FTRACE_PLT_IDX], FTRACE_ADDR); =20 mod->arch.ftrace_trampolines =3D plts; - - s =3D find_section(hdr, sechdrs, ".init.text.ftrace_trampoline"); - if (!s) - return -ENOEXEC; - - plts =3D (void *)s->sh_addr; - - __init_plt(&plts[FTRACE_PLT_IDX], FTRACE_ADDR); - - mod->arch.init_ftrace_trampolines =3D plts; - #endif return 0; } --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E728D3CB91E for ; Sat, 22 Aug 2026 13:54:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406856; cv=none; b=t9UtisrfRxgPYoFodY2EoelRYww83Zs/qMk89HlF3UmhelF9T6881uptakQkJ+8XOy400DjuVPMJApkMDQhxO3O+fM7/6ZUXUG95/O9WYTFUHDPb28kgi0Y3cDG7X/QXYr08Gh7CgqAnKT0H/hV8iyZZBsz+IK+JKPl1dnnoO2o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406856; c=relaxed/simple; bh=FmB/MEpIx8L1P7CFC1Vukrpcog8HIRySaKtpuR1ShSM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=pXNyNdEehKBne2utvd7Sa/DC16EdzvhY/KieT/FT0WdKyIGId58SYZ0g80YCSU3/1txXZV4dvlSDWFonzcJIYXk8y1hUEWqE34QbKAVOvadvWBfgouNH7rqkTCHWwfyhQD5vXG1Z/TyzXED+OOZoN3vLMQcA5Z8XxdIfR8YFLdY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=XKUlheSb; arc=none smtp.client-ip=209.85.221.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="XKUlheSb" Received: by mail-wr1-f70.google.com with SMTP id ffacd0b85a97d-47f8f8fde2dso1244023f8f.0 for ; Sat, 22 Aug 2026 06:54:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406853; x=1788011653; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4lE3r1MZLrWL74IP7BP3pqzwy+IxcMr+2cYN0bFzQAQ=; b=XKUlheSb9LAFFWBDr2RVqAiyRqAiRf12vHjfH3JDhmzXzR5kPd+UjaDj0KwT2XlKUm nOY08O2uW4Ht8Ony5cNNrgK/EGraKdHeWqwbDzc2Y6drSL33FuyMHMGdq6eJavUxTTxL /riQCR1w2SF6miq4VOPl+4Eejsc+mY7nb2e7FB1VGRsmd9s/7aPSVV22LOI9zZ/7BgjA pK0fd/mGH2dhMBiWvnSpTjSIGHY+mtbaYIKeL2QFGLK1vvKIsLldLrCG3m8iyzll22v2 Opo/rlUrpQcPjv+e76Mamyaws1xaWoZxBW+xUx2esxrgjOghmDN5P2nezFHEhpFMtfnZ ECWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406853; x=1788011653; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4lE3r1MZLrWL74IP7BP3pqzwy+IxcMr+2cYN0bFzQAQ=; b=gYgj/5l0OvgZm6pE4jvvIwIDXQ9tfs2ZjMTcBqXcx7PetXSTKkBGKWoLhhKdM1VhP3 Rhzqko/zWxB2DF9Yy6tuYjh1q/6oI2E38ZGFtYXcR+iQ22E718rPsPR8RVTClfpTzSU2 KTDG/8bb6vw2DxlLxWtoS9xk/B+gWL3Vow2r6sxlEmUNoGJ1w2OQr3/IpLvojfcU5lzc LndUN/5d1SOup7E8YL8oOreIS4D4RSCXVKerrapt9O2ppyQdBv3ZNQN2idJccDZsQ7+d yW4+ThzgiGx8BFXmKA1BMz02jY1IYnxohk36epLaJq5I6FiQZiCBfFoKZ5aLT4yebJ9g EWOA== X-Gm-Message-State: AFuF++nIbroBiHUu6PvX7ws8AhY2J7zPcZiwlaF74Ll+7vyq3gF9jETp 8NmSuSesmWXkAodscwgw6ghxmEdF3/+laO5Dd+MmpeZW9DsaoModBkPWgQtgzCkG1WGiArei9sr IehPmvwYVUNatkJl5H1iR6ITBP6OF+ouc+kpuX+gC107dGHKN27NL/aG33K9yHwTL3sVWMqRrog svexhQfuSIwcKUshkm7yMIF5AIa7Yo+W6Zpg== X-Received: from wrbgf1.prod.google.com ([2002:a05:6000:27c1:b0:462:567a:6591]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a5d:6f13:0:b0:47f:e9fd:80d8 with SMTP id ffacd0b85a97d-482c0bb40bemr18991596f8f.21.1787406852902; Sat, 22 Aug 2026 06:54:12 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:30 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=5799; i=ardb@kernel.org; h=from:subject; bh=5Vh9JPqa1jt8juFWDYh0K543ecP29Z3LFYkXXDIJ0JE=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5f0rrx+s+jGrVkH3hJXknjsl122VL1WsEJX3nyc5J 3SrBmd9RykLgxgXg6yYIovA7L/vdp6eKFXrPEsWZg4rE8gQBi5OAZjIp2BGhvu/oyTzD638eknh x5azWglPZFe66t+aGDBlhfIq+S9TPy9gZJj348O6+Lw9ldcEz9Z/ZujJu/c0/uE08dwNgV7bPq9 szmYAAA== X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-19-ardb+git@google.com> Subject: [RFC PATCH 8/9] arm64: module: Combine init and core PLT entries again From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel It is no longer possible for .init.text to end up being placed out of direct branching range of the .text section of the same module, so the PLT array of core and init code can be combined again. It also means there is no longer a need to allocate PLT entries for cross-section calls within the same module, and so the upper bound for the number of needed entries can be lowered again as well. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/module.h | 1 - arch/arm64/include/asm/module.lds.h | 1 - arch/arm64/kernel/module-plts.c | 35 +++++--------------- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/arch/arm64/include/asm/module.h b/arch/arm64/include/asm/modul= e.h index 79550b22ba19..9328fadb4a95 100644 --- a/arch/arm64/include/asm/module.h +++ b/arch/arm64/include/asm/module.h @@ -15,7 +15,6 @@ struct mod_plt_sec { =20 struct mod_arch_specific { struct mod_plt_sec core; - struct mod_plt_sec init; =20 /* for CONFIG_DYNAMIC_FTRACE */ struct plt_entry *ftrace_trampolines; diff --git a/arch/arm64/include/asm/module.lds.h b/arch/arm64/include/asm/m= odule.lds.h index 0c3aea98e116..24fc9401c514 100644 --- a/arch/arm64/include/asm/module.lds.h +++ b/arch/arm64/include/asm/module.lds.h @@ -1,6 +1,5 @@ SECTIONS { .plt 0 : { BYTE(0) } - .init.plt 0 : { BYTE(0) } .text.ftrace_trampoline 0 : { BYTE(0) } =20 #ifdef CONFIG_KASAN_SW_TAGS diff --git a/arch/arm64/kernel/module-plts.c b/arch/arm64/kernel/module-plt= s.c index bde32979c06a..e30876b90e30 100644 --- a/arch/arm64/kernel/module-plts.c +++ b/arch/arm64/kernel/module-plts.c @@ -70,8 +70,7 @@ u64 module_emit_plt_entry(struct module *mod, Elf64_Shdr = *sechdrs, void *loc, const Elf64_Rela *rela, Elf64_Sym *sym) { - struct mod_plt_sec *pltsec =3D !within_module_init((unsigned long)loc, mo= d) ? - &mod->arch.core : &mod->arch.init; + struct mod_plt_sec *pltsec =3D &mod->arch.core; struct plt_entry *plt =3D (struct plt_entry *)sechdrs[pltsec->plt_shndx].= sh_addr; int i =3D pltsec->plt_num_entries; int j =3D i - 1; @@ -101,8 +100,7 @@ u64 module_emit_plt_entry(struct module *mod, Elf64_Shd= r *sechdrs, u64 module_emit_veneer_for_adrp(struct module *mod, Elf64_Shdr *sechdrs, void *loc, u64 val) { - struct mod_plt_sec *pltsec =3D !within_module_init((unsigned long)loc, mo= d) ? - &mod->arch.core : &mod->arch.init; + struct mod_plt_sec *pltsec =3D &mod->arch.core; struct plt_entry *plt =3D (struct plt_entry *)sechdrs[pltsec->plt_shndx].= sh_addr; int i =3D pltsec->plt_num_entries++; u32 br; @@ -169,17 +167,17 @@ static unsigned int count_plts(Elf64_Sym *syms, Elf64= _Rela *rela, int num, case R_AARCH64_CALL26: /* * We only have to consider branch targets that resolve - * to symbols that are defined in a different section. + * to symbols that are not defined in the same module. * This is not simply a heuristic, it is a fundamental * limitation, since there is no guaranteed way to emit * PLT entries sufficiently close to the branch if the * section size exceeds the range of a branch * instruction. So ignore relocations against defined - * symbols if they live in the same section as the + * symbols if they live in the same module as the * relocation target. */ s =3D syms + ELF64_R_SYM(rela[i].r_info); - if (s->st_shndx =3D=3D dstidx) + if (s->st_shndx !=3D SHN_UNDEF) break; =20 /* @@ -281,7 +279,6 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr = *sechdrs, char *secstrings, struct module *mod) { unsigned long core_plts =3D 0; - unsigned long init_plts =3D 0; Elf64_Sym *syms =3D NULL; Elf_Shdr *pltsec, *tramp =3D NULL; int i; @@ -293,8 +290,6 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr = *sechdrs, for (i =3D 0; i < ehdr->e_shnum; i++) { if (!strcmp(secstrings + sechdrs[i].sh_name, ".plt")) mod->arch.core.plt_shndx =3D i; - else if (!strcmp(secstrings + sechdrs[i].sh_name, ".init.plt")) - mod->arch.init.plt_shndx =3D i; else if (!strcmp(secstrings + sechdrs[i].sh_name, ".text.ftrace_trampoline")) tramp =3D sechdrs + i; @@ -302,8 +297,8 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr = *sechdrs, syms =3D (Elf64_Sym *)sechdrs[i].sh_addr; } =20 - if (!mod->arch.core.plt_shndx || !mod->arch.init.plt_shndx) { - pr_err("%s: module PLT section(s) missing\n", mod->name); + if (!mod->arch.core.plt_shndx) { + pr_err("%s: module PLT section missing\n", mod->name); return -ENOEXEC; } if (!syms) { @@ -332,12 +327,8 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr= *sechdrs, if (nents) sort(rels, nents, sizeof(Elf64_Rela), cmp_rela, NULL); =20 - if (!module_init_layout_section(secstrings + dstsec->sh_name)) - core_plts +=3D count_plts(syms, rels, numrels, - sechdrs[i].sh_info, dstsec); - else - init_plts +=3D count_plts(syms, rels, numrels, - sechdrs[i].sh_info, dstsec); + core_plts +=3D count_plts(syms, rels, numrels, sechdrs[i].sh_info, + dstsec); } =20 pltsec =3D sechdrs + mod->arch.core.plt_shndx; @@ -348,14 +339,6 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr= *sechdrs, mod->arch.core.plt_num_entries =3D 0; mod->arch.core.plt_max_entries =3D core_plts; =20 - pltsec =3D sechdrs + mod->arch.init.plt_shndx; - pltsec->sh_type =3D SHT_NOBITS; - pltsec->sh_flags =3D SHF_EXECINSTR | SHF_ALLOC; - pltsec->sh_addralign =3D L1_CACHE_BYTES; - pltsec->sh_size =3D (init_plts + 1) * sizeof(struct plt_entry); - mod->arch.init.plt_num_entries =3D 0; - mod->arch.init.plt_max_entries =3D init_plts; - if (tramp) { tramp->sh_type =3D SHT_NOBITS; tramp->sh_flags =3D SHF_EXECINSTR | SHF_ALLOC; --=20 2.55.0.860.g4b6b3295ed-goog From nobody Mon Sep 28 11:38:39 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E51473CA4A9 for ; Sat, 22 Aug 2026 13:54:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406859; cv=none; b=CGOzMzQaqZJ5PCVB6lGeR5EyRC4julzB596EAQdHD/hpAtc+Z+eq9B5F8vjv3czaDgAqOA2ecyzPTgUE8s3nSWG0MLr4o5UyIZ4ccpAmwZKB03ksLborNMeLXfXBnD16wbnFgoxpo7TwOwUw/63W6Crlo+8vaTXKXv5g9vqmFH4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787406859; c=relaxed/simple; bh=KzkGg2FO9EGkV0PFVKpsKMx4fbZaAn79KH1T1TlQHZs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YA88GpKhnac5ZqBB/T0hRxQZcC2xmm2QXBwjpbqMWUMcGqTI25YmKGrnKqhx+UjJ9fgE3eKWgH+ALWykQgkk4iDTJ206RT2OVDdCrgI8SsQPcPfxOtnqc/kYaC6c1N++HY2XdFmoCRb4Si/wTTx2o6bSixqBGLnNiEH0cacNX7U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=gH9BZJvT; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ardb.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="gH9BZJvT" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4997b060af8so9087265e9.1 for ; Sat, 22 Aug 2026 06:54:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1787406854; x=1788011654; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=Fli+nS6RhVan3nt659uJs8jpsHJEZUSGw+6iw8TgCBk=; b=gH9BZJvT8mpN0tqhrjCbcss3fLgqWSU0Ci0dWRCyp7PP4DaIu3giSwmHA0yoyPJInI eBk3vgbHCgZjn102R+5EiK2d70aunBm1p4U8uGjmJ5d3Y83lcKWmYEREnRofLfr7Ja8v pSOI9DLgZIoc4OcrYLepYd3GwPOU51RuuFBRQPwDH8rK02jfTuiSMCO6vdz6cJBhHVUt UPsfg7eudzGiAF4CZAZb23CjazxMZMKK/Ek90/hxLURvPdV9nr/hdT7evfdLaH/M2ZHa gFBNTcfbQGehIvVFaO26fxPGWXTubqSPGLRVhPQ+m4oHYVR9CYlpkO9Yzrx22bqlTatT wIPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787406854; x=1788011654; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Fli+nS6RhVan3nt659uJs8jpsHJEZUSGw+6iw8TgCBk=; b=GJMqC4oGSJok4ROfkZcQ55QRLMDOq4zxY2gPhcDjUZZdCJUcpF2VO2EMe8VNdwbt+x xfqvdubc2DAdTsRGYlXckVYHd795pno8zeOv6XuI6If3P4Oxtf0JUlBFYltuonMlZrFz MhPpPU4YmH/YjMwqvOOFz1uTneRG1YC0bps/BJ9DkKZB9VmJJiQe/m5NmTkgsUm16H9D 0DWcn4PxVWVkgn29e1OBB7XxF60YDv5bNd1dawW0izWYniZeRLe2HkLFLCK9pfzSbg/t 5cCYJgWCrdzlpvdI/4/e0Qh/UY9eQmt8O2cfWGx3mmpysseMIfpS0imFdqoWcVCnguGY y59Q== X-Gm-Message-State: AFuF++lLix7Tf05MpMHYvWeigM1DU+4HVTc1MSsnDBs++AtH7WsY5kDD 6s+uUBtMj0zhjAsxvibT2SxGZrrW+zA8MjK6y8u9oZbpiC8Dr93oJ1MKGqpDcRz1jkisUoxcvwY AlrlVEmHvZIkKQ2Pgk6BF5mnq26agBjwVXRX8OUuABF02OzFqhNP25OVD1D6cgDFigzK6p4zVzT 0lUih0Y6YFYaUu3tz5B27xSpSRUwKHlNjP3g== X-Received: from wmfu6.prod.google.com ([2002:a05:600c:1386:b0:495:4396:e1fc]) (user=ardb job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4f87:b0:499:5a50:b022 with SMTP id 5b1f17b1804b1-499b830d220mr157719645e9.3.1787406853968; Sat, 22 Aug 2026 06:54:13 -0700 (PDT) Date: Sat, 22 Aug 2026 15:53:31 +0200 In-Reply-To: <20260822135323.795946-11-ardb+git@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260822135323.795946-11-ardb+git@google.com> X-Developer-Key: i=ardb@kernel.org; a=openpgp; fpr=F43D03328115A198C90016883D200E9CA6329909 X-Developer-Signature: v=1; a=openpgp-sha256; l=3229; i=ardb@kernel.org; h=from:subject; bh=E47PSMirXFpI2/XCsflkCaR86s287Dpi3LlkrwYeMZU=; b=owGbwMvMwCVmkMcZplerG8N4Wi2JIatz5YP+Sf2p1kr7Q6vXvzG479h57WWiGrOK0SxDm5Zur rn/05U6SlkYxLgYZMUUWQRm/3238/REqVrnWbIwc1iZQIYwcHEKwETM0hj+xzDKsHPO3dNxlH9C 0+uIc6a1D/ek6rI+m2n6kfsH+/Iz2xj+xz1lvlS6rabo2mvOz1OevZxXu7UtMFJsxfK5+yQPz9Z 5ygoA X-Mailer: git-send-email 2.55.0.860.g4b6b3295ed-goog Message-ID: <20260822135323.795946-20-ardb+git@google.com> Subject: [RFC PATCH 9/9] arm64: ftrace: Simplify PLT handling From: Ard Biesheuvel To: linux-kernel@vger.kernel.org Cc: Ard Biesheuvel , Catalin Marinas , Will Deacon , Steven Rostedt , Masami Hiramatsu , Mark Rutland , Andrew Morton , Mike Rapoport , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , "=?UTF-8?q?Adrian=20Barna=C5=9B?=" , Ryan Roberts , Kevin Brodsky , linux-arm-kernel@lists.infradead.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org, linux-modules@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel Instead of emitting the ftrace trampoline PLT into a separate ELF section, allocate them at the start of the ordinary PLT array, so that no special sections are needed. Signed-off-by: Ard Biesheuvel --- arch/arm64/include/asm/module.lds.h | 1 - arch/arm64/kernel/module-plts.c | 18 +++++------------- arch/arm64/kernel/module.c | 9 +-------- 3 files changed, 6 insertions(+), 22 deletions(-) diff --git a/arch/arm64/include/asm/module.lds.h b/arch/arm64/include/asm/m= odule.lds.h index 24fc9401c514..95540e956b41 100644 --- a/arch/arm64/include/asm/module.lds.h +++ b/arch/arm64/include/asm/module.lds.h @@ -1,6 +1,5 @@ SECTIONS { .plt 0 : { BYTE(0) } - .text.ftrace_trampoline 0 : { BYTE(0) } =20 #ifdef CONFIG_KASAN_SW_TAGS /* diff --git a/arch/arm64/kernel/module-plts.c b/arch/arm64/kernel/module-plt= s.c index e30876b90e30..6900d2242f1b 100644 --- a/arch/arm64/kernel/module-plts.c +++ b/arch/arm64/kernel/module-plts.c @@ -275,12 +275,14 @@ static int partition_branch_plt_relas(Elf64_Sym *syms= , Elf64_Rela *rela, return i; } =20 +static const int ftrace_plts =3D IS_ENABLED(CONFIG_DYNAMIC_FTRACE) ? NR_FT= RACE_PLTS : 0; + int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings, struct module *mod) { - unsigned long core_plts =3D 0; + unsigned long core_plts =3D ftrace_plts; Elf64_Sym *syms =3D NULL; - Elf_Shdr *pltsec, *tramp =3D NULL; + Elf_Shdr *pltsec; int i; =20 /* @@ -290,9 +292,6 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr = *sechdrs, for (i =3D 0; i < ehdr->e_shnum; i++) { if (!strcmp(secstrings + sechdrs[i].sh_name, ".plt")) mod->arch.core.plt_shndx =3D i; - else if (!strcmp(secstrings + sechdrs[i].sh_name, - ".text.ftrace_trampoline")) - tramp =3D sechdrs + i; else if (sechdrs[i].sh_type =3D=3D SHT_SYMTAB) syms =3D (Elf64_Sym *)sechdrs[i].sh_addr; } @@ -336,15 +335,8 @@ int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr= *sechdrs, pltsec->sh_flags =3D SHF_EXECINSTR | SHF_ALLOC; pltsec->sh_addralign =3D L1_CACHE_BYTES; pltsec->sh_size =3D (core_plts + 1) * sizeof(struct plt_entry); - mod->arch.core.plt_num_entries =3D 0; + mod->arch.core.plt_num_entries =3D ftrace_plts; mod->arch.core.plt_max_entries =3D core_plts; =20 - if (tramp) { - tramp->sh_type =3D SHT_NOBITS; - tramp->sh_flags =3D SHF_EXECINSTR | SHF_ALLOC; - tramp->sh_addralign =3D __alignof__(struct plt_entry); - tramp->sh_size =3D NR_FTRACE_PLTS * sizeof(struct plt_entry); - } - return 0; } diff --git a/arch/arm64/kernel/module.c b/arch/arm64/kernel/module.c index 6e5b488a219e..620c2b70115e 100644 --- a/arch/arm64/kernel/module.c +++ b/arch/arm64/kernel/module.c @@ -454,14 +454,7 @@ static int module_init_ftrace_plt(const Elf_Ehdr *hdr, struct module *mod) { #if defined(CONFIG_DYNAMIC_FTRACE) - const Elf_Shdr *s; - struct plt_entry *plts; - - s =3D find_section(hdr, sechdrs, ".text.ftrace_trampoline"); - if (!s) - return -ENOEXEC; - - plts =3D (void *)s->sh_addr; + struct plt_entry *plts =3D (void *)sechdrs[mod->arch.core.plt_shndx].sh_a= ddr; =20 __init_plt(&plts[FTRACE_PLT_IDX], FTRACE_ADDR); =20 --=20 2.55.0.860.g4b6b3295ed-goog