From nobody Sun Feb 8 05:42:21 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 7BA6337F72E for ; Mon, 19 Jan 2026 14:46:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768833971; cv=none; b=akzIWUdt5SogBrcugLCkCCCJ4hhe5u2QYvEyn7DwDwE+huI01dyyx84C7BFhT7xMftaj0RP166Pk9KbuJtWlKSmnRRjU5EtXM3Tu5RvWyL9LP3A1huS2EqSvySGjth2f6z2t+jYCIL8NP13mjHk+sz0RVOiW50s0v0B7EFGQAuQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768833971; c=relaxed/simple; bh=Pf1pjDvtnCUzFoGDt9pspycHnaK6M5WCtoGVBuIbBVY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RpAN884XA7Kl+oJEPIN8/4VsXFJnJVPrkkZMaUnvyR7JrPPaLQEAu6SKU3wNPu68r6JKDz/SrD5yAsNUh59BZlruwain8kL6B1Fs23NLzbQb2g2htFlphsiOE9Nl6O2gfqQefMStg/kt5to5lwIIgsithZCGjzxi+qDjjjZRFd0= 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=Q9ZD+gmW; arc=none smtp.client-ip=209.85.167.50 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="Q9ZD+gmW" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-59b9fee27ccso454715e87.2 for ; Mon, 19 Jan 2026 06:46:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768833964; x=1769438764; 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=fsjvsl9QLRbiT7Kn7hO3fVpNzPEyahcgYF/8T1qgI5c=; b=Q9ZD+gmWKDTrzpDboWAiGnJ+WEuG05HyLdTzTveRQJymu1LQIEIU6XbVbmpXg/o4K/ if9kxINoFYvDXJlAVsaXldC1cSx9YVxJdanmISpMSdv31h/2X8Vl/CjvmvMa8xvINxOz URBGG+J8KDUWcoVv3IG93WQf0RlK6d9AG1yntCZXALl0Ki6MQ/1oDvHPXDAMD360l+TV 5KsNAPm/toGV9DxZKzEqZ1tDZqD7HrlFUBcaRBsc/DjIyFTeVRyEnKXEc0ogY69Wbdmx Z7tgKUW4wMPukGQR2zrzydh8RjAulTWRVFBUId/q0GJBkKy4fhzvyMVff2Hf+G6on4yv f5JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768833964; x=1769438764; 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=fsjvsl9QLRbiT7Kn7hO3fVpNzPEyahcgYF/8T1qgI5c=; b=u2D8IamUzHmRJMRttU+94Qg1m8RPstLbb4tx3HeYrn9FCriuLnbgQTvC++lu1O/kHb KwNjcOc2LZt4M4vghFOHyvpcMIACzXQK6hmx81ejcfVQECl+pzXb2FefVxdaVqTQh7oo JjjA1LhDWOGk0+gWxzJrsB0vJWZJ0jnwXPOG5vTKnmi45XvuiaqLi8xyY7O0MydJGgV3 MBuJyIfP5/7ImI2WrlmhhvVQQ67VQXPZk4/gOswr5Havjbpw4IrSJeMnrrIhAzdBm7dc V5H7GMzE0+qd2V5E620hpvMLneQwj6P//ei7rvMy3RNS1P5eLGNvrJ5qONArCY1I/bpL AHCA== X-Forwarded-Encrypted: i=1; AJvYcCXz0/C0likyFNtfcmW0TOoImUzZo+0vXoqbcEklUfR2LpP0LCXcL4Z12m0YRTYySG/g0KF/hdX3b9S4TBs=@vger.kernel.org X-Gm-Message-State: AOJu0YwztMkY/N0ohVOOCNKEEHGpU8gtVVocQ1LuN4nTyzPwXr4SdTqH p9Ra28+gkW4c6Aka/Ycl19XUxTvwxkfIiPLjCRxcpfi98bERnSRr1iwl X-Gm-Gg: AY/fxX4Y9SzJOpLWpgsUmaciupnyqnzSjIzbNPGzooi2UCt7MR8c6Wkhw9TY8azAqIv pL7x0ZElLXkMdUAiCCGD0AETijUxX888hpmY8eViPxFl+OfufE8DNF1QRTWv19M0CWmplAm/1CG PeQDW44VrtwXnmKXj1erA4pA2IT9m/TfafWIOqw79qjr1bkgIWs3mk3stafVL/rkDf9VYjHIOa2 qckmvBdUAAyb+0HbLikNS6/cizNicFgXaixBXf0HZdA7V6pig7yOdGdWhBGRKqe3dNRaYQ+XNGL Q82njoBmObItLz3YQwBtthmao3jY1OfG8KAba+VTJOhqLqFvlNgybNnxE9aLumUNOKOCa7d/gYH AkVpoEhSTirTVL1nWBjTkV8iYVEzU/uuu2yJo5kIq9ZlywTiGFs3RXSC3ndXeuPGQrunlposlp4 ZuxzfE41FwYnsbc6sqGxT/GVQ= X-Received: by 2002:ac2:568c:0:b0:59d:a4ed:2309 with SMTP id 2adb3069b0e04-59da4ed238fmr294405e87.1.1768833963843; Mon, 19 Jan 2026 06:46:03 -0800 (PST) Received: from dellarbn.yandex.net ([80.93.240.68]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-59baf33ed36sm3408385e87.18.2026.01.19.06.46.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 19 Jan 2026 06:46:03 -0800 (PST) From: Andrey Ryabinin To: Andrew Morton Cc: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= , Maciej Wieczor-Retman , Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , kasan-dev@googlegroups.com, Uladzislau Rezki , linux-kernel@vger.kernel.org, linux-mm@kvack.org, Andrey Ryabinin Subject: [PATCH] mm-kasan-fix-kasan-poisoning-in-vrealloc-fix Date: Mon, 19 Jan 2026 15:45:09 +0100 Message-ID: <20260119144509.32767-1-ryabinin.a.a@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" Move kasan_enabled() check to header function to avoid function call if kasan disabled via boot cmdline. Move __kasan_vrealloc() to common.c to fix CONFIG_KASAN_HW_TAGS=3Dy Signed-off-by: Andrey Ryabinin Reviewed-by: Andrey Konovalov --- include/linux/kasan.h | 10 +++++++++- mm/kasan/common.c | 21 +++++++++++++++++++++ mm/kasan/shadow.c | 24 ------------------------ 3 files changed, 30 insertions(+), 25 deletions(-) diff --git a/include/linux/kasan.h b/include/linux/kasan.h index ff27712dd3c8..338a1921a50a 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -641,9 +641,17 @@ kasan_unpoison_vmap_areas(struct vm_struct **vms, int = nr_vms, __kasan_unpoison_vmap_areas(vms, nr_vms, flags); } =20 -void kasan_vrealloc(const void *start, unsigned long old_size, +void __kasan_vrealloc(const void *start, unsigned long old_size, unsigned long new_size); =20 +static __always_inline void kasan_vrealloc(const void *start, + unsigned long old_size, + unsigned long new_size) +{ + if (kasan_enabled()) + __kasan_vrealloc(start, old_size, new_size); +} + #else /* CONFIG_KASAN_VMALLOC */ =20 static inline void kasan_populate_early_vm_area_shadow(void *start, diff --git a/mm/kasan/common.c b/mm/kasan/common.c index ed489a14dddf..b7d05c2a6d93 100644 --- a/mm/kasan/common.c +++ b/mm/kasan/common.c @@ -606,4 +606,25 @@ void __kasan_unpoison_vmap_areas(struct vm_struct **vm= s, int nr_vms, __kasan_unpoison_vmalloc(addr, size, flags | KASAN_VMALLOC_KEEP_TAG); } } + +void __kasan_vrealloc(const void *addr, unsigned long old_size, + unsigned long new_size) +{ + if (new_size < old_size) { + kasan_poison_last_granule(addr, new_size); + + new_size =3D round_up(new_size, KASAN_GRANULE_SIZE); + old_size =3D round_up(old_size, KASAN_GRANULE_SIZE); + if (new_size < old_size) + __kasan_poison_vmalloc(addr + new_size, + old_size - new_size); + } else if (new_size > old_size) { + old_size =3D round_down(old_size, KASAN_GRANULE_SIZE); + __kasan_unpoison_vmalloc(addr + old_size, + new_size - old_size, + KASAN_VMALLOC_PROT_NORMAL | + KASAN_VMALLOC_VM_ALLOC | + KASAN_VMALLOC_KEEP_TAG); + } +} #endif diff --git a/mm/kasan/shadow.c b/mm/kasan/shadow.c index e9b6b2d8e651..32fbdf759ea2 100644 --- a/mm/kasan/shadow.c +++ b/mm/kasan/shadow.c @@ -651,30 +651,6 @@ void __kasan_poison_vmalloc(const void *start, unsigne= d long size) kasan_poison(start, size, KASAN_VMALLOC_INVALID, false); } =20 -void kasan_vrealloc(const void *addr, unsigned long old_size, - unsigned long new_size) -{ - if (!kasan_enabled()) - return; - - if (new_size < old_size) { - kasan_poison_last_granule(addr, new_size); - - new_size =3D round_up(new_size, KASAN_GRANULE_SIZE); - old_size =3D round_up(old_size, KASAN_GRANULE_SIZE); - if (new_size < old_size) - __kasan_poison_vmalloc(addr + new_size, - old_size - new_size); - } else if (new_size > old_size) { - old_size =3D round_down(old_size, KASAN_GRANULE_SIZE); - __kasan_unpoison_vmalloc(addr + old_size, - new_size - old_size, - KASAN_VMALLOC_PROT_NORMAL | - KASAN_VMALLOC_VM_ALLOC | - KASAN_VMALLOC_KEEP_TAG); - } -} - #else /* CONFIG_KASAN_VMALLOC */ =20 int kasan_alloc_module_shadow(void *addr, size_t size, gfp_t gfp_mask) --=20 2.52.0