From nobody Tue Dec 2 02:03:02 2025 Received: from mail-pl1-f179.google.com (mail-pl1-f179.google.com [209.85.214.179]) (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 35CE133F8DA for ; Fri, 21 Nov 2025 09:44:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763718259; cv=none; b=Reh0zdbTHIy9uzZ9sChQ6ctMc8I+wj0lFEjhQvkcWcf+MChpPPPGiBVF1pDcJE3S4YQyRssXMYSe1cxoGhvH8hkNFfITCEjPlf1ROervU4xSBun6kPDcwMCEKVbuJEWlvM5YQpfF8t2JwUCg1S+/1kCmMHctySAfgPceFPS3iVs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763718259; c=relaxed/simple; bh=KWTufEhJBsAYQD/Q7H4UFW/jUTwHzyrtXKlz5eYXRro=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=h2NLWmQHdYbTS5Dz3MaGuz2yVygg9xp2Czlik/S0OJiZ++gyJ8OwVlZKKGzrkoh9IoLzvjRlJwOSgWWzyyRYakzNMVwlW0Efx8KdgrgeAex1r241MBwR9MuldVThkyUCxprsJ7fbL3qKkc3Yqk1IUFc+TYleU64XWI76QDugAy0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MtrLQ0RW; arc=none smtp.client-ip=209.85.214.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MtrLQ0RW" Received: by mail-pl1-f179.google.com with SMTP id d9443c01a7336-29555b384acso22420955ad.1 for ; Fri, 21 Nov 2025 01:44:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763718256; x=1764323056; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ihgP3PHNDO2dE6rTOKUbTvgS7JrxdNHtivdt9vcT2gw=; b=MtrLQ0RWmDP8zAL53N8PrEDCWKA6gc+/qYA+bFwCOFl+CUf5ZinwLcW9Wq2YsDzn2Z kCfb3zCAHA+7z+FOMBv5APxR970ngODwLXA+gztF2Iu4li6DJQfl/80+nrFvybXQEv6+ b40ZTg/SPb+bXeyEaylpNgCkUTghyB1iuZRJ4HdloqMu/wyMKi/4jMtVbgEQ6ktql3W8 BWo5xv66MXg5CAWvVzfBpyEf3qTYxkVFX9SGYKyYLrnuGaDQGLZACUScOR+BlVQFse54 ekoWmOgIf08ykkfCfjm1FUGWsXZcBp5mN3gf/e8Zh1vMGc495/rhD/+zc4F85hsOBhmz bV7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763718256; x=1764323056; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ihgP3PHNDO2dE6rTOKUbTvgS7JrxdNHtivdt9vcT2gw=; b=uaGIv/QhqM9CXuPriguGg5IyUSTI+9TKImOlMX6+XfLxwjIrFoh6EY+lOJM9hcU/nn as6NTpgDo0nTR/gCUrzt2JXBbWdQGy9TXCi689Ih8AubAhUBMmGMPDy/ps+hzkaKlWln pxwbSWwPc89J2GZCNAlY7YmY2/3Mq8NZl388VTHIKw4MfwD9+/PjvYHsH5Uxz5p0VzFK u3i9tzDeCzYeDdiDcU2+mLvrek6b0vTyOVImt1wii6NcDncwxAKFrs8SlS/jqHKOFfCA CpA1Fd7v+7QzsE6e+9gt0ANsQSvcTSAX0beIn3gAGzo7HclJ2EAR7aO+ajAcSOrjUVEQ 5hdw== X-Forwarded-Encrypted: i=1; AJvYcCX6vqC1HvbgwdeYTQtX8qyQGfMBtefiHXI2gu7eDCtiAUjJXNFQoQPUk3w62xDytNgJu0LWSO2uTS8tGy8=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/aiSWOPrbePDzr92RJl/ujI+qIvsZad/z97vdTkIu0TNTsAZh gwpJDGfiU5ODMG1WJBCjHD2CKJ4gWlJyLOuC8C29y6ePvKAXxI/jHHZf X-Gm-Gg: ASbGncvUSsunFpl8GCislhuAygWe89tBU+gvBlwIz6jMZnauEyPff/G0wDreNVU64z2 /WpuNAj6yoBGVn3OisIuYG/bZrFC9x6jUW4xfJh6dEPEL0s7I6JN/KDeQaDjWPJIueQmXo5SK7K mun4JbCbqKa4lOApo2hSpf+ipj3VdRtu31gsPTVwRGGofLq71gxmh/k9+sG5AV0KJhPutB7U7BZ NOCIK4FxLQHKj3KXIX1PL7jXU3O8CzPK6iNeVP47SX/a8GainvxhqAvbJ3NxmVTT9fIlqxjKxI7 htMSnBTS7qbdrorAjLsy6J1jqn1nIgOto+FyMWVzPodvlT2/1UBILHVcM2zrlWtYemCxvLNfCQa sSZBr8HXEx294L7Er4T2AyqSfrqaYULzeBhTD3N2wfmlDJzV9N+DG9hiOk/PbIb1OuxFNY5kd/q qcEhVf673jW5ysdxJHTqg62ZNuUTOE+lbH8Qaog2H3pn8= X-Google-Smtp-Source: AGHT+IHtn09p/fUajl3JJ7EDFZVm6tN+LhxuwChjRg+EFm3vaMok3KbuKyaYH45O/+tQEly7J9pPSw== X-Received: by 2002:a05:7022:ef18:b0:11a:342e:8a98 with SMTP id a92af1059eb24-11c9d5653edmr607339c88.0.1763718255862; Fri, 21 Nov 2025 01:44:15 -0800 (PST) Received: from fedora (c-67-164-59-41.hsd1.ca.comcast.net. [67.164.59.41]) by smtp.googlemail.com with ESMTPSA id a92af1059eb24-11c93db4a23sm22430736c88.2.2025.11.21.01.44.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 21 Nov 2025 01:44:15 -0800 (PST) From: "Vishal Moola (Oracle)" To: Andrew Morton Cc: Uladzislau Rezki , Christoph Hellwig , linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Vishal Moola (Oracle)" , Christoph Hellwig , SeongJae Park Subject: [PATCH v4 1/4] mm/vmalloc: warn on invalid vmalloc gfp flags Date: Fri, 21 Nov 2025 01:44:02 -0800 Message-ID: <20251121094405.40628-2-vishal.moola@gmail.com> X-Mailer: git-send-email 2.51.1 In-Reply-To: <20251121094405.40628-1-vishal.moola@gmail.com> References: <20251121094405.40628-1-vishal.moola@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Vmalloc explicitly supports a list of flags, but we never enforce them. vmalloc has been trying to handle unsupported flags by clearing and setting flags wherever necessary. This is messy and makes the code harder to understand, when we could simply check for a supported input immediately instead. Define a helper mask and function telling callers they have passed in invalid flags, and clear those unsupported vmalloc flags. Suggested-by: Christoph Hellwig Signed-off-by: Vishal Moola (Oracle) Reviewed-by: Christoph Hellwig Reviewed-by: "Uladzislau Rezki (Sony)" Acked-by: SeongJae Park --- mm/vmalloc.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 0832f944544c..c97c874b6666 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3911,6 +3911,28 @@ static void *__vmalloc_area_node(struct vm_struct *a= rea, gfp_t gfp_mask, return NULL; } =20 +/* + * See __vmalloc_node_range() for a clear list of supported vmalloc flags. + * This gfp lists all flags currently passed through vmalloc. Currently, + * __GFP_ZERO is used by BPF and __GFP_NORETRY is used by percpu. Both drm + * and BPF also use GFP_USER. Additionally, various users pass + * GFP_KERNEL_ACCOUNT. Xfs uses __GFP_NOLOCKDEP. + */ +#define GFP_VMALLOC_SUPPORTED (GFP_KERNEL | GFP_ATOMIC | GFP_NOWAIT |\ + __GFP_NOFAIL | __GFP_ZERO | __GFP_NORETRY |\ + GFP_NOFS | GFP_NOIO | GFP_KERNEL_ACCOUNT |\ + GFP_USER | __GFP_NOLOCKDEP) + +static gfp_t vmalloc_fix_flags(gfp_t flags) +{ + gfp_t invalid_mask =3D flags & ~GFP_VMALLOC_SUPPORTED; + + flags &=3D GFP_VMALLOC_SUPPORTED; + WARN_ONCE(1, "Unexpected gfp: %#x (%pGg). Fixing up to gfp: %#x (%pGg). F= ix your code!\n", + invalid_mask, &invalid_mask, flags, &flags); + return flags; +} + /** * __vmalloc_node_range - allocate virtually contiguous memory * @size: allocation size @@ -4092,6 +4114,8 @@ EXPORT_SYMBOL_GPL(__vmalloc_node_noprof); =20 void *__vmalloc_noprof(unsigned long size, gfp_t gfp_mask) { + if (unlikely(gfp_mask & ~GFP_VMALLOC_SUPPORTED)) + gfp_mask =3D vmalloc_fix_flags(gfp_mask); return __vmalloc_node_noprof(size, 1, gfp_mask, NUMA_NO_NODE, __builtin_return_address(0)); } @@ -4131,6 +4155,8 @@ EXPORT_SYMBOL(vmalloc_noprof); */ void *vmalloc_huge_node_noprof(unsigned long size, gfp_t gfp_mask, int nod= e) { + if (unlikely(gfp_mask & ~GFP_VMALLOC_SUPPORTED)) + gfp_mask =3D vmalloc_fix_flags(gfp_mask); return __vmalloc_node_range_noprof(size, 1, VMALLOC_START, VMALLOC_END, gfp_mask, PAGE_KERNEL, VM_ALLOW_HUGE_VMAP, node, __builtin_return_address(0)); --=20 2.51.1