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 64EA0C433F5 for ; Sun, 27 Mar 2022 17:31:43 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 977336B0071; Sun, 27 Mar 2022 13:31:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 901246B0073; Sun, 27 Mar 2022 13:31:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 79FBA8D0001; Sun, 27 Mar 2022 13:31:42 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.25]) by kanga.kvack.org (Postfix) with ESMTP id 64DCF6B0071 for ; Sun, 27 Mar 2022 13:31:42 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay13.hostedemail.com (Postfix) with ESMTP id 2714D60621 for ; Sun, 27 Mar 2022 17:31:42 +0000 (UTC) X-FDA: 79290858444.03.FA68C08 Received: from mail-yb1-f182.google.com (mail-yb1-f182.google.com [209.85.219.182]) by imf16.hostedemail.com (Postfix) with ESMTP id A9BB518002C for ; Sun, 27 Mar 2022 17:31:41 +0000 (UTC) Received: by mail-yb1-f182.google.com with SMTP id v35so22345632ybi.10 for ; Sun, 27 Mar 2022 10:31:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=zr0NjEDn5ahm6BQl9cvFf4dmTZugbKlSBosKFEdMvGE=; b=h+37ODtnkJ7MiURB8YYbqoFGCcPx7Qpg+DWSWAL7f82ah+0CBjQXs8wpusJLry2oe6 yWVZm64apx6y+McOu+Y2QhsCOOYd+iP5/4DM/w4bPTagYTgmt2BiSpQOkFt/pyYPamQz 1csnIsLYgjd2h9zEc9On5mOzBpY1DuXBRhKaPhyikp/qUrj1yZd0zOfHBbnwZ3Sz+CMO wI0lzkbj4mcZLDTSaAHTIoET5WxkiGl79BjthFc0YS7umTyQR61LOi3jwKX3GRW1ZIUW tQ8AjxiH4zS28VWB5gqNysY7172nuAHgLwoKQd0hozmCWhXMpsPU0K4aemCAS9+TZJQK Xt2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=zr0NjEDn5ahm6BQl9cvFf4dmTZugbKlSBosKFEdMvGE=; b=hNrlph34K1WOhL9YpcTL0c9KowBMufJUOy3pbO97JBfxKeCSOGSEvMTJfh5icg+WBD fmZyto4VRPx1DARj1QrmijGU5xfsvgUlkGoQsG0C/8VYITqXtnAa54fhrEozE4Ya4D+d YagEzML3RDH0Cq0rn3ZPhfHsMoHlVQmJUbrb/GK4uaQ1ujoAP4mPj4hIRM2wNivrJcHy JSgfPJfIxL/lA9AOmB4DwDMGqMGZq/TkzgsEybZ0Sc90dCAlnCivFfh3seuH3M/jSHEE Amwjjyt13rd72u7DxnVehTzr7zZF9j+YIV/i7cF/gIuTKdSrTJKyfLYGfTyuZDT3yNIU dP2Q== X-Gm-Message-State: AOAM532ZPiQDVxhKn4pnyRtEciUIVyGjBXOKqX5lBqn8+3DdLb2pe7/9 F8URHoLhNAOCTsYPuUEanGEcKmqvhWUF/k/ybup4TA== X-Google-Smtp-Source: ABdhPJyGnwKMfYcqaiFZe1zeZU3RqSmU7N6GnYgQV6XjaXq8hsj8Vi7m8Y1L2eKljjv4r5eGm1bTnSJVmmXUyEVfi+g= X-Received: by 2002:a05:6902:1149:b0:634:63a3:f6a1 with SMTP id p9-20020a056902114900b0063463a3f6a1mr19743428ybu.425.1648402300751; Sun, 27 Mar 2022 10:31:40 -0700 (PDT) MIME-Version: 1.0 References: <20220327051853.57647-1-songmuchun@bytedance.com> <20220327051853.57647-2-songmuchun@bytedance.com> In-Reply-To: <20220327051853.57647-2-songmuchun@bytedance.com> From: Marco Elver Date: Sun, 27 Mar 2022 19:31:04 +0200 Message-ID: Subject: Re: [PATCH 2/2] mm: kfence: fix objcgs vector allocation To: Muchun Song Cc: torvalds@linux-foundation.org, glider@google.com, dvyukov@google.com, akpm@linux-foundation.org, cl@linux.com, penberg@kernel.org, rientjes@google.com, iamjoonsoo.kim@lge.com, vbabka@suse.cz, roman.gushchin@linux.dev, kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: wfwpmw395hwxndidgg4tnsam1ob6b5pw Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=h+37ODtn; spf=pass (imf16.hostedemail.com: domain of elver@google.com designates 209.85.219.182 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: A9BB518002C X-HE-Tag: 1648402301-779932 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, 27 Mar 2022 at 07:19, Muchun Song wrote: > > If the kfence object is allocated to be used for objects vector, then > this slot of the pool eventually being occupied permanently since > the vector is never freed. The solutions could be 1) freeing vector > when the kfence object is freed or 2) allocating all vectors statically. > Since the memory consumption of object vectors is low, it is better to > chose 2) to fix the issue and it is also can reduce overhead of vectors > allocating in the future. > > Fixes: d3fb45f370d9 ("mm, kfence: insert KFENCE hooks for SLAB") > Signed-off-by: Muchun Song > --- > mm/kfence/core.c | 3 +++ > mm/kfence/kfence.h | 1 + > 2 files changed, 4 insertions(+) Thanks for this -- mostly looks good. Minor comments below + also please fix what the test robot reported. > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > index 13128fa13062..9976b3f0d097 100644 > --- a/mm/kfence/core.c > +++ b/mm/kfence/core.c > @@ -579,9 +579,11 @@ static bool __init kfence_init_pool(void) > } > > for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) { > + struct slab *slab = virt_to_slab(addr); > struct kfence_metadata *meta = &kfence_metadata[i]; > > /* Initialize metadata. */ > + slab->memcg_data = (unsigned long)&meta->objcg | MEMCG_DATA_OBJCGS; Maybe just move it to kfence_guarded_alloc(), see "/* Set required slab fields */", where similar initialization on slab is done. > INIT_LIST_HEAD(&meta->list); > raw_spin_lock_init(&meta->lock); > meta->state = KFENCE_OBJECT_UNUSED; > @@ -938,6 +940,7 @@ void __kfence_free(void *addr) > { > struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr); > > + KFENCE_WARN_ON(meta->objcg); This holds true for both SLAB and SLUB, right? (I think it does, but just double-checking.) > /* > * If the objects of the cache are SLAB_TYPESAFE_BY_RCU, defer freeing > * the object, as the object page may be recycled for other-typed > diff --git a/mm/kfence/kfence.h b/mm/kfence/kfence.h > index 2a2d5de9d379..6f0e1aece3f8 100644 > --- a/mm/kfence/kfence.h > +++ b/mm/kfence/kfence.h > @@ -89,6 +89,7 @@ struct kfence_metadata { > struct kfence_track free_track; > /* For updating alloc_covered on frees. */ > u32 alloc_stack_hash; > + struct obj_cgroup *objcg; > }; > > extern struct kfence_metadata kfence_metadata[CONFIG_KFENCE_NUM_OBJECTS]; > -- > 2.11.0 >