From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 68FB83FB06D for ; Wed, 13 May 2026 10:58:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778669902; cv=none; b=pveoyS2NXwaSeTcjX231jg6aGUfSjIo5atOWmt42WFp3wSEUEpWkMzi26ijE1gUyVne6IxyB+oD6szEzLzviNCIMMI6ubQG3auf6vsYA/UI8AJVgeUPJaU/Ix0UDeXNHcyzZhKN/S9wRms9hmY0lvYuMN9YrhyGa7/5ZI25NLK4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778669902; c=relaxed/simple; bh=NamPXilA4rJjOKvo9OhmxYnQOChROKpr703f2A0MNL4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RlFQWpd71kK1R6A/10xdDlH3LA//hRyKIyqTpdcDQQFS+PII4joeqKFNGF9UeSZpbWTdfo5k2b14fcldvT+z3lq+Tv27JG0xMenlB/ai+f02Zk/3A9BEuS7BQn4jdLzx9eBe5rRl3K/jS/8g1eQx0gx4be2kHx9DGNvPGkMxdB8= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=CE69JfQI; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="CE69JfQI" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 819D71655; Wed, 13 May 2026 03:58:15 -0700 (PDT) Received: from a080796.blr.arm.com (a080796.arm.com [10.164.21.51]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 7F7CE3F7B4; Wed, 13 May 2026 03:58:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1778669900; bh=NamPXilA4rJjOKvo9OhmxYnQOChROKpr703f2A0MNL4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CE69JfQIYQBEbu15G/3hwUd6A94Vi6U3OZgYwEH3fIYGXOB6hXHTmAVZn517eNaQt 0azC9G0CuuL874A8WC3Kuk3SB1PLbFN9Nd41oo/Xc3QKCJU0pPNtp+o2wngGg93l1c N1LhWHOd7Z/DT787YvXTGTmcgY8n8OtAJ50VR88U= From: Dev Jain To: akpm@linux-foundation.org, vbabka@kernel.org, harry@kernel.org, ryabinin.a.a@gmail.com Cc: Dev Jain , surenb@google.com, mhocko@suse.com, jackmanb@google.com, hannes@cmpxchg.org, ziy@nvidia.com, hao.li@linux.dev, cl@gentwo.org, rientjes@google.com, roman.gushchin@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, glider@google.com, andreyknvl@gmail.com, dvyukov@google.com, vincenzo.frascino@arm.com, kasan-dev@googlegroups.com, ryan.roberts@arm.com, anshuman.khandual@arm.com, catalin.marinas@arm.com Subject: [PATCH 3/3] vmalloc: hw_tags: optimize vmalloc redzoning Date: Wed, 13 May 2026 16:27:34 +0530 Message-Id: <20260513105734.3380544-4-dev.jain@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260513105734.3380544-1-dev.jain@arm.com> References: <20260513105734.3380544-1-dev.jain@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit If the allocation size is less than a page, vmalloc first unpoisons the entire page, then poisons the tail with KASAN_TAG_INVALID (for hw tags), to catch OOB. Instead, unpoison the allocation length, and then poison the tail, saving some work. Signed-off-by: Dev Jain --- mm/kasan/hw_tags.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c index cbef5e450954..7c94f71b5f12 100644 --- a/mm/kasan/hw_tags.c +++ b/mm/kasan/hw_tags.c @@ -364,9 +364,6 @@ void *__kasan_unpoison_vmalloc(const void *start, unsigned long size, tag = (flags & KASAN_VMALLOC_KEEP_TAG) ? get_tag(start) : kasan_random_tag(); start = set_tag(start, tag); - /* Unpoison and initialize memory up to size. */ - kasan_unpoison(start, size, flags & KASAN_VMALLOC_INIT); - /* * Explicitly poison and initialize the in-page vmalloc() redzone. * Unlike software KASAN modes, hardware tag-based KASAN doesn't @@ -375,8 +372,14 @@ void *__kasan_unpoison_vmalloc(const void *start, unsigned long size, redzone_start = round_up((unsigned long)start + size, KASAN_GRANULE_SIZE); redzone_size = round_up(redzone_start, PAGE_SIZE) - redzone_start; - kasan_poison((void *)redzone_start, redzone_size, KASAN_TAG_INVALID, - flags & KASAN_VMALLOC_INIT); + + /* Unpoison and initialize memory before the redzone. */ + kasan_unpoison(start, redzone_start - (unsigned long)start, + flags & KASAN_VMALLOC_INIT); + + if (redzone_size) + kasan_poison((void *)redzone_start, redzone_size, + KASAN_TAG_INVALID, flags & KASAN_VMALLOC_INIT); /* * Set per-page tag flags to allow accessing physical memory for the -- 2.43.0