From mboxrd@z Thu Jan 1 00:00:00 1970 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 79940C54EE9 for ; Sun, 25 Sep 2022 16:31:50 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 604148E001D; Sun, 25 Sep 2022 12:31:49 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5B3768E0007; Sun, 25 Sep 2022 12:31:49 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 452B48E001D; Sun, 25 Sep 2022 12:31:49 -0400 (EDT) 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 355628E0007 for ; Sun, 25 Sep 2022 12:31:49 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 02858A9A35 for ; Sun, 25 Sep 2022 16:31:48 +0000 (UTC) X-FDA: 79951149138.26.B71BD04 Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by imf25.hostedemail.com (Postfix) with ESMTP id B1FDCA000A for ; Sun, 25 Sep 2022 16:31:48 +0000 (UTC) Received: by mail-qv1-f46.google.com with SMTP id mi14so3048127qvb.12 for ; Sun, 25 Sep 2022 09:31:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=C77rGCAYqGdTYQ5Hat6z7HfUcuu3QTxI69RZhcgUIhM=; b=ARNgIAQgcmdEtZOEexNNmGTo6Z9hsC3jci8S3O3+hey4a9RZsz3JkKVf+xclu8qRBe SQFORAr9hfCEyo+ZnGbD0dcJnnb38ai3BTpsv98wqNG5QYC4J8/pM0tegoZkeCv9DQyO QjP768mKhlw/fy6EQ1iSVh/6t1thIPSr3E1H96PLQ96JaihyJu/r15rK0qjEpoYoID2h dAjEZhhoobRodaqreGvoP7UEhHRstXMbD1MhrqzDruOhMZ8Yh8cr357KG+0ud0irD9pp 2n6TKfAhTMRe89Kf80nzRGVXZmc0ly85uTuVnCcCk4laF1isEnAfhj2/3R0jGPBkZb3T PQ6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=C77rGCAYqGdTYQ5Hat6z7HfUcuu3QTxI69RZhcgUIhM=; b=Mzgym8aQxDwn8wlckWuhaU8foQpCtI7CJ3CqaYNxvhXsl0jCSFObACZPujIM6+4os7 dbzd75ctSzBdl3ufl5bBW5o5SB4Rrm0hJAJmgTPdYtuBSWSmB1IVJdM6WXTuhRJYlb42 bryrk5gRYGLCb+ylzEd0RG9FETYrD/n9nlJ+xako5hu8zf/3pwHvyrs4a03Jte3fWSrx c9yRKw0PRu+3JXkMBm/SMzxUyk5/G1UHs3ovjqa5DkzqiCpyt9B0i75twWlC6L4xLYrT LN/0T64YdP8zFP7Kb30yS1N39XI7W5bVpZkHVSOESVAhXE55HfLzLQZE6CHUZy0+XiDQ 0L1w== X-Gm-Message-State: ACrzQf0wLQF2hqWn0b0J9rJspswG8FF0PtGpRZSCzdRBJnJvNwC/CSjT yeFQUaTsWFhlBDOEI8JKxa+WwzJ0NItNoF4cpW0= X-Google-Smtp-Source: AMsMyM4doZj44Hg5ElMbFU3KNWnssOmCSzbnnb/z3KiU48Pk6cWRggRQJQWV2OBGFJGgx6O67DOEFuPTFYCCrGQmbuE= X-Received: by 2002:ad4:5be2:0:b0:4ad:791c:8724 with SMTP id k2-20020ad45be2000000b004ad791c8724mr14396644qvc.56.1664123507765; Sun, 25 Sep 2022 09:31:47 -0700 (PDT) MIME-Version: 1.0 References: <20220913065423.520159-1-feng.tang@intel.com> <20220913065423.520159-4-feng.tang@intel.com> In-Reply-To: From: Andrey Konovalov Date: Sun, 25 Sep 2022 18:31:37 +0200 Message-ID: Subject: Re: [PATCH v6 3/4] mm: kasan: Add free_meta size info in struct kasan_cache To: Feng Tang Cc: Andrew Morton , Vlastimil Babka , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Dmitry Vyukov , Jonathan Corbet , "Hansen, Dave" , Linux Memory Management List , LKML , kasan-dev , "Sang, Oliver" Content-Type: text/plain; charset="UTF-8" ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1664123508; a=rsa-sha256; cv=none; b=iNeLLYw/xuxRdl8K3f+F9Ebvfm1a6RGpgLXih5jxhQ6Zy9POkoj61/KGIDAMZtk1O4kEtq nsonPZEMmTxCCPV1AqW9awpAUWLfTY7Xvrp7iv25OsH33BpxTU17FXf18drWYD/5or+YRe plmfrh/jOUWtTJiTI8EA3u7dOazAWD0= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=ARNgIAQg; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf25.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.219.46 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1664123508; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=C77rGCAYqGdTYQ5Hat6z7HfUcuu3QTxI69RZhcgUIhM=; b=pWf8KrnZNNSFM/Cz9jwW5Wdd7f6TgiYyJMFACh22VxiTPJaA7zogzqXL7GzsClJBcgim7w LtNmUQiqK2KvntzNVruSh1oGP+JkTUVpFPIiapy9uNEtTHl3e0xRCbzlSIO/BICSGDpHs/ qQ65o46aA0f0WjGK5XCe1WZKaY1maF0= X-Rspamd-Server: rspam11 X-Rspam-User: X-Rspamd-Queue-Id: B1FDCA000A Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=ARNgIAQg; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf25.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.219.46 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com X-Stat-Signature: 3e86f96j611kkncioj7qduxn9kgf9xed X-HE-Tag: 1664123508-127575 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: On Sun, Sep 25, 2022 at 1:27 PM Feng Tang wrote: > > > [1] https://lore.kernel.org/linux-mm/c7b316d30d90e5947eb8280f4dc78856a49298cf.1662411799.git.andreyknvl@google.com/ > > I noticed this has been merged to -mm tree's 'mm-everything' branch, > so following is the patch againt that. Thanks! > > One thing I'm not very sure is, to check 'in-object' kasan's meta > size, I didn't check 'alloc_meta_offset', as from the code reading > the alloc_meta is never put inside slab object data area. Yes, this is correct. > Thanks, > Feng > > ---8<--- > > diff --git a/include/linux/kasan.h b/include/linux/kasan.h > index d811b3d7d2a1..96c9d56e5510 100644 > --- a/include/linux/kasan.h > +++ b/include/linux/kasan.h > @@ -302,7 +302,7 @@ static inline void kasan_unpoison_task_stack(struct task_struct *task) {} > > #ifdef CONFIG_KASAN_GENERIC > > -size_t kasan_metadata_size(struct kmem_cache *cache); > +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, > slab_flags_t *flags); > @@ -315,7 +315,8 @@ void kasan_record_aux_stack_noalloc(void *ptr); > #else /* CONFIG_KASAN_GENERIC */ > > /* Tag-based KASAN modes do not use per-object metadata. */ > -static inline size_t kasan_metadata_size(struct kmem_cache *cache) > +static inline size_t kasan_metadata_size(struct kmem_cache *cache, > + bool in_object) > { > return 0; > } > diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c > index d8b5590f9484..5a806f9b9466 100644 > --- a/mm/kasan/generic.c > +++ b/mm/kasan/generic.c > @@ -450,15 +450,22 @@ void kasan_init_object_meta(struct kmem_cache *cache, const void *object) > __memset(alloc_meta, 0, sizeof(*alloc_meta)); > } > > -size_t kasan_metadata_size(struct kmem_cache *cache) > +size_t kasan_metadata_size(struct kmem_cache *cache, bool in_object) > { > + struct kasan_cache *info = &cache->kasan_info ; > + > if (!kasan_requires_meta()) > return 0; > - return (cache->kasan_info.alloc_meta_offset ? > - sizeof(struct kasan_alloc_meta) : 0) + > - ((cache->kasan_info.free_meta_offset && > - cache->kasan_info.free_meta_offset != KASAN_NO_FREE_META) ? > - sizeof(struct kasan_free_meta) : 0); > + > + if (in_object) > + return (info->free_meta_offset ? > + 0 : sizeof(struct kasan_free_meta)); > + else > + return (info->alloc_meta_offset ? > + sizeof(struct kasan_alloc_meta) : 0) + > + ((info->free_meta_offset && > + info->free_meta_offset != KASAN_NO_FREE_META) ? > + sizeof(struct kasan_free_meta) : 0); > } > > static void __kasan_record_aux_stack(void *addr, bool can_alloc) > diff --git a/mm/slub.c b/mm/slub.c > index ce8310e131b3..a75c21a0da8b 100644 > --- a/mm/slub.c > +++ b/mm/slub.c > @@ -887,7 +887,7 @@ static void print_trailer(struct kmem_cache *s, struct slab *slab, u8 *p) > if (s->flags & SLAB_STORE_USER) > off += 2 * sizeof(struct track); > > - off += kasan_metadata_size(s); > + off += kasan_metadata_size(s, false); > > if (off != size_from_object(s)) > /* Beginning of the filler is the free pointer */ > @@ -1042,7 +1042,7 @@ static int check_pad_bytes(struct kmem_cache *s, struct slab *slab, u8 *p) > /* We also have user information there */ > off += 2 * sizeof(struct track); > > - off += kasan_metadata_size(s); > + off += kasan_metadata_size(s, false); > > if (size_from_object(s) == off) > return 1; Reviewed-by: Andrey Konovalov Thanks!