From patchwork Wed Nov 23 12:31:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feng Tang X-Patchwork-Id: 13053604 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47437C4332F for ; Wed, 23 Nov 2022 12:35:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D8FEC6B0071; Wed, 23 Nov 2022 07:35:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D19746B0073; Wed, 23 Nov 2022 07:35:03 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE07D6B0074; Wed, 23 Nov 2022 07:35:03 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id AB9A96B0071 for ; Wed, 23 Nov 2022 07:35:03 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 41FDA811B0 for ; Wed, 23 Nov 2022 12:35:03 +0000 (UTC) X-FDA: 80164651686.28.A699CE1 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by imf05.hostedemail.com (Postfix) with ESMTP id 6D2DD10000D for ; Wed, 23 Nov 2022 12:35:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669206902; x=1700742902; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=32aAwApD/Py6ob5i40TYQ76jp/UicXBWzicek/tVfb0=; b=LJObVJpRgz6IuMc4QHol/J10hd0CaHbbjFZZODOh7N40c/fOtMFs2FTU nQnWz3LsWd0JD5K1wNR8ExKeFQS1v6lEuAw3LQ6TafFvUaPvmwZJ8OWUe j2k26JHTNI2MBaIC8XO84OI9yvsYYw+ogr/42WkHe9mqhcvS6GpC5fTeq 2+hUgh6uV/Y4CY1kWcNH/C5PsfEdf/PO5OeVFN7Aunqm85ycnNlwz21oQ LtPzWzjspSvGQfznC7vm/Qi0i1S8KGHj7pPRE+xEvMDN9SrAp415g1YmG ciUoU3fU2SyfA1D3L/I2QAQtFdO1lBkzYZ6J3jan9+flALgZtZCWf2Aab w==; X-IronPort-AV: E=McAfee;i="6500,9779,10539"; a="301614980" X-IronPort-AV: E=Sophos;i="5.96,187,1665471600"; d="scan'208";a="301614980" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Nov 2022 04:35:00 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10539"; a="705349428" X-IronPort-AV: E=Sophos;i="5.96,187,1665471600"; d="scan'208";a="705349428" Received: from feng-clx.sh.intel.com ([10.238.200.228]) by fmsmga008.fm.intel.com with ESMTP; 23 Nov 2022 04:34:57 -0800 From: Feng Tang To: Andrew Morton , Vlastimil Babka , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Andrey Konovalov , Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Vincenzo Frascino Cc: linux-mm@kvack.org, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, Feng Tang Subject: [PATCH v2 -next 1/2] mm/slb: add is_kmalloc_cache() helper function Date: Wed, 23 Nov 2022 20:31:58 +0800 Message-Id: <20221123123159.2325763-1-feng.tang@intel.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1669206902; a=rsa-sha256; cv=none; b=u4zC8yLxlq+2QnR0xo02ZbL/QoL4fcTx4R9EWtQVMf6+dUYoe6Nd4TwkeN5JtgOGf9OH8y eEeKPjAD1rgn1/4uCA/kB5W2jLApBIa8jyVH6aiD3VslQB+KEJjIdX0Ykc1Orx+OtTQvdO V5R3LdNwnG50tEcferaRVgP1AQ/xk5Q= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=LJObVJpR; spf=pass (imf05.hostedemail.com: domain of feng.tang@intel.com designates 134.134.136.20 as permitted sender) smtp.mailfrom=feng.tang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1669206902; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=CJmzxhK0F+EQBwqW32oQ/vEbzIh81a1UF0l3egqzynI=; b=OHsvXjLMzzCLCoxEuaQbZmPZC7NXCOsTzw9jtO4YLRWuxTOK3QLHRMSSnRm0ROFqulyB9i ouXPeSuLcwS9CfwfqmGMvUUbO+0h1gUMVUWkWCM7OijkoXKfJg4cg3TFvMm7JUOHCE+da/ 7nDI8u7yYnVogpl5Pye3aYrJcQoWKiY= X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 6D2DD10000D Authentication-Results: imf05.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=LJObVJpR; spf=pass (imf05.hostedemail.com: domain of feng.tang@intel.com designates 134.134.136.20 as permitted sender) smtp.mailfrom=feng.tang@intel.com; dmarc=pass (policy=none) header.from=intel.com X-Rspam-User: X-Stat-Signature: mscwfy916kzs6xrniery9sa461kz335a X-HE-Tag: 1669206902-860686 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: commit 6edf2576a6cc ("mm/slub: enable debugging memory wasting of kmalloc") introduces 'SLAB_KMALLOC' bit specifying whether a kmem_cache is a kmalloc cache for slab/slub (slob doesn't have dedicated kmalloc caches). Add a helper inline function for other components like kasan to simplify code. Signed-off-by: Feng Tang Acked-by: Vlastimil Babka Acked-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> --- changlog: since v1: * don't use macro for the helper (Andrew Morton) * place the inline function in mm/slb.h to solve data structure definition issue (Vlastimil Babka) mm/slab.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mm/slab.h b/mm/slab.h index e3b3231af742..0d72fd62751a 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -325,6 +325,14 @@ static inline slab_flags_t kmem_cache_flags(unsigned int object_size, } #endif +static inline bool is_kmalloc_cache(struct kmem_cache *s) +{ +#ifndef CONFIG_SLOB + return (s->flags & SLAB_KMALLOC); +#else + return false; +#endif +} /* Legal flag mask for kmem_cache_create(), for various configurations */ #define SLAB_CORE_FLAGS (SLAB_HWCACHE_ALIGN | SLAB_CACHE_DMA | \ From patchwork Wed Nov 23 12:31:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Feng Tang X-Patchwork-Id: 13053605 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D01FEC4332F for ; Wed, 23 Nov 2022 12:35:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3CD2D6B0073; Wed, 23 Nov 2022 07:35:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 37CDC6B0074; Wed, 23 Nov 2022 07:35:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1A96C6B0075; Wed, 23 Nov 2022 07:35:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 02B906B0073 for ; Wed, 23 Nov 2022 07:35:06 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id C3C9D411DD for ; Wed, 23 Nov 2022 12:35:05 +0000 (UTC) X-FDA: 80164651770.09.320C191 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by imf05.hostedemail.com (Postfix) with ESMTP id 1D58C100011 for ; Wed, 23 Nov 2022 12:35:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1669206905; x=1700742905; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/ZAAjGfYIjdVR+5X0uaKgifD9for1Ic1lKNhQ5iJ4HU=; b=mJ2ejFi7dmGRB7vvZVlVKBU/YBDaXccEf9j+ySPndjYov7lyd9rdrT0k NXH5oL3HJJXp2TEv+Bz1/WAnfmNLFqKJCMyGCwbmi+VZgZ2bUlo8j8D/d q2jRmXzbo7Dx2vUNmenRMxwVJYyaPEPdFobHfK22U8sh/1Qy3UkciJs2M GFVdIbTxi0wewwZU37PjqXH5mb9hdlJazWtsXcrmhgmQYAGyBFKH48W8F t3NY7nqJy5JDVVfrXoVRp0/kEt5bSivEedBduJfgWB5dVQyXTLGIA/tLL f62TfTqWZ0soLM5yPsfM18nb0D+VdItlklbgN65L7pl8frQ2Jv38a2R4s g==; X-IronPort-AV: E=McAfee;i="6500,9779,10539"; a="301614996" X-IronPort-AV: E=Sophos;i="5.96,187,1665471600"; d="scan'208";a="301614996" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Nov 2022 04:35:04 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10539"; a="705349470" X-IronPort-AV: E=Sophos;i="5.96,187,1665471600"; d="scan'208";a="705349470" Received: from feng-clx.sh.intel.com ([10.238.200.228]) by fmsmga008.fm.intel.com with ESMTP; 23 Nov 2022 04:35:00 -0800 From: Feng Tang To: Andrew Morton , Vlastimil Babka , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Andrey Konovalov , Dmitry Vyukov , Andrey Ryabinin , Alexander Potapenko , Vincenzo Frascino Cc: linux-mm@kvack.org, kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, Feng Tang Subject: [PATCH v2 -next 2/2] mm/kasan: simplify and refine kasan_cache code Date: Wed, 23 Nov 2022 20:31:59 +0800 Message-Id: <20221123123159.2325763-2-feng.tang@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221123123159.2325763-1-feng.tang@intel.com> References: <20221123123159.2325763-1-feng.tang@intel.com> MIME-Version: 1.0 ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1669206905; a=rsa-sha256; cv=none; b=IqVrXO6jxr4JeNAn8XUQZxuNShlb3y3zGOgWPJuCDCShxlzC1vXcUy2dcVXihgySMEwEUD 2qAN0xWfsFbAEWIuLP4vxnlYbFnz1jxHDbwgsxM9I2Rk/MbpAIXMbuNg+IJ0U4w4bO9Xl8 iqg/ThHD5g+hpq+F6acT2AThdYv6780= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=mJ2ejFi7; spf=pass (imf05.hostedemail.com: domain of feng.tang@intel.com designates 134.134.136.20 as permitted sender) smtp.mailfrom=feng.tang@intel.com; dmarc=pass (policy=none) header.from=intel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1669206905; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=DKpDEUuzQP3JS6vSn7fniF3BoC56bwIDZKe8r0jOrQM=; b=sjkyR6kCCRwGsmIeSj5n2uiM8hwrzg31ICb0nQ0xjlwLNyWl88wd4oX6D3bluJrQuWrEie TJtNM203PkTISy/Wnz2iidlx/295s0YpjHyxFgmCd1+hWYKJvsSqFVsPQ+RRM10cmpdPHa /YpeQ1IEakGVNiJ3aQ6985uPVZEoVPQ= X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 1D58C100011 Authentication-Results: imf05.hostedemail.com; dkim=none ("invalid DKIM record") header.d=intel.com header.s=Intel header.b=mJ2ejFi7; spf=pass (imf05.hostedemail.com: domain of feng.tang@intel.com designates 134.134.136.20 as permitted sender) smtp.mailfrom=feng.tang@intel.com; dmarc=pass (policy=none) header.from=intel.com X-Rspam-User: X-Stat-Signature: wz5un9yrdnnyn7fq4ehit1zeca83g9jf X-HE-Tag: 1669206904-431052 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: struct 'kasan_cache' has a member 'is_kmalloc' indicating whether its host kmem_cache is a kmalloc cache. With newly introduced is_kmalloc_cache() helper, 'is_kmalloc' and its related function can be replaced and removed. Also 'kasan_cache' is only needed by KASAN generic mode, and not by SW/HW tag modes, so refine its protection macro accordingly, suggested by Andrey Konoval. Signed-off-by: Feng Tang Reviewed-by: Andrey Konovalov --- Changlog: Since v1 * Use CONFIG_KASAN_GENERIC instead of CONFIG_KASAN for 'kasan_cache', as suggested by Andrey Konovalov include/linux/kasan.h | 22 +++++----------------- include/linux/slab_def.h | 2 +- include/linux/slub_def.h | 2 +- mm/kasan/common.c | 9 ++------- mm/slab_common.c | 1 - 5 files changed, 9 insertions(+), 27 deletions(-) diff --git a/include/linux/kasan.h b/include/linux/kasan.h index dff604912687..0ff382f79f80 100644 --- a/include/linux/kasan.h +++ b/include/linux/kasan.h @@ -96,15 +96,6 @@ static inline bool kasan_has_integrated_init(void) } #ifdef CONFIG_KASAN - -struct kasan_cache { -#ifdef CONFIG_KASAN_GENERIC - int alloc_meta_offset; - int free_meta_offset; -#endif - bool is_kmalloc; -}; - void __kasan_unpoison_range(const void *addr, size_t size); static __always_inline void kasan_unpoison_range(const void *addr, size_t size) { @@ -129,13 +120,6 @@ static __always_inline bool kasan_unpoison_pages(struct page *page, return false; } -void __kasan_cache_create_kmalloc(struct kmem_cache *cache); -static __always_inline void kasan_cache_create_kmalloc(struct kmem_cache *cache) -{ - if (kasan_enabled()) - __kasan_cache_create_kmalloc(cache); -} - void __kasan_poison_slab(struct slab *slab); static __always_inline void kasan_poison_slab(struct slab *slab) { @@ -252,7 +236,6 @@ static inline void kasan_poison_pages(struct page *page, unsigned int order, bool init) {} static inline bool kasan_unpoison_pages(struct page *page, unsigned int order, bool init) { return false; } -static inline void kasan_cache_create_kmalloc(struct kmem_cache *cache) {} static inline void kasan_poison_slab(struct slab *slab) {} static inline void kasan_unpoison_object_data(struct kmem_cache *cache, void *object) {} @@ -303,6 +286,11 @@ static inline void kasan_unpoison_task_stack(struct task_struct *task) {} #ifdef CONFIG_KASAN_GENERIC +struct kasan_cache { + int alloc_meta_offset; + int free_meta_offset; +}; + size_t kasan_metadata_size(struct kmem_cache *cache, bool in_object); slab_flags_t kasan_never_merge(void); void kasan_cache_create(struct kmem_cache *cache, unsigned int *size, diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h index f0ffad6a3365..39f7f1f95de2 100644 --- a/include/linux/slab_def.h +++ b/include/linux/slab_def.h @@ -72,7 +72,7 @@ struct kmem_cache { int obj_offset; #endif /* CONFIG_DEBUG_SLAB */ -#ifdef CONFIG_KASAN +#ifdef CONFIG_KASAN_GENERIC struct kasan_cache kasan_info; #endif diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index f9c68a9dac04..4e7cdada4bbb 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h @@ -132,7 +132,7 @@ struct kmem_cache { unsigned int *random_seq; #endif -#ifdef CONFIG_KASAN +#ifdef CONFIG_KASAN_GENERIC struct kasan_cache kasan_info; #endif diff --git a/mm/kasan/common.c b/mm/kasan/common.c index 1f30080a7a4c..6e265beefc27 100644 --- a/mm/kasan/common.c +++ b/mm/kasan/common.c @@ -122,11 +122,6 @@ void __kasan_poison_pages(struct page *page, unsigned int order, bool init) KASAN_PAGE_FREE, init); } -void __kasan_cache_create_kmalloc(struct kmem_cache *cache) -{ - cache->kasan_info.is_kmalloc = true; -} - void __kasan_poison_slab(struct slab *slab) { struct page *page = slab_page(slab); @@ -326,7 +321,7 @@ void * __must_check __kasan_slab_alloc(struct kmem_cache *cache, kasan_unpoison(tagged_object, cache->object_size, init); /* Save alloc info (if possible) for non-kmalloc() allocations. */ - if (kasan_stack_collection_enabled() && !cache->kasan_info.is_kmalloc) + if (kasan_stack_collection_enabled() && !is_kmalloc_cache(cache)) kasan_save_alloc_info(cache, tagged_object, flags); return tagged_object; @@ -372,7 +367,7 @@ static inline void *____kasan_kmalloc(struct kmem_cache *cache, * Save alloc info (if possible) for kmalloc() allocations. * This also rewrites the alloc info when called from kasan_krealloc(). */ - if (kasan_stack_collection_enabled() && cache->kasan_info.is_kmalloc) + if (kasan_stack_collection_enabled() && is_kmalloc_cache(cache)) kasan_save_alloc_info(cache, (void *)object, flags); /* Keep the tag that was set by kasan_slab_alloc(). */ diff --git a/mm/slab_common.c b/mm/slab_common.c index 8276022f0da4..a5480d67f391 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c @@ -663,7 +663,6 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, create_boot_cache(s, name, size, flags | SLAB_KMALLOC, useroffset, usersize); - kasan_cache_create_kmalloc(s); list_add(&s->list, &slab_caches); s->refcount = 1; return s;