From mboxrd@z Thu Jan 1 00:00:00 1970 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-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 = (1 << 0), EXECMEM_ROX_CACHE = (1 << 1), + EXECMEM_NO_HUGE_VMAP = (1 << 2), }; #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) static void *execmem_cache_populate_alloc(struct execmem_range *range, size_t size) { - unsigned long vm_flags = VM_ALLOW_HUGE_VMAP; + unsigned long vm_flags = (range->flags & EXECMEM_NO_HUGE_VMAP) + ? 0 : VM_ALLOW_HUGE_VMAP; struct mutex *mutex = &execmem_cache.mutex; struct vm_struct *vm; size_t alloc_size; -- 2.55.0.860.g4b6b3295ed-goog