Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp5592469pxb; Mon, 28 Mar 2022 14:41:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyLNDFkhhJGsTJ/sXUhcd/ZJ25uxW/WFklS+8FWkBSaMCPxhgEnOTQOhvmA4WjK4EY2rkdR X-Received: by 2002:a05:6122:9a6:b0:33f:f23e:bdee with SMTP id g38-20020a05612209a600b0033ff23ebdeemr11158694vkd.6.1648503662281; Mon, 28 Mar 2022 14:41:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648503662; cv=none; d=google.com; s=arc-20160816; b=niSLboKGsFlVgtWQHZfLLoc4+QLA3uyMlQ6UH1JfqR+OYkqs7k4JjMIgOg9FST7RtQ 8AVnYurgmaK5OMZ5aUge1zMlCfUewz4lIrWsww7t/9sv+fNoeKswZ0WscSSZcZ4hUTvf Cn1zGaO9XuPGls6fEYsVjv8sprAQB3HTKqEMNKvFmhFMpGimzgWt/CDo0UQq6WiwdEBH 8kkImn4JzRtD4BKFsjkHYimTpZAVLb/+6VuGRQU8TkQ0LkF268oO31/jpx8AS4/APztw 2z1MZOix4c/tyAHjpPClUciXsHdXZIpjpkVCTotzA5KzyGYFh6HZvNTO69vuHyPAJQTp Nn4w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=zr0NjEDn5ahm6BQl9cvFf4dmTZugbKlSBosKFEdMvGE=; b=jeWFzJelWdko45tFeADsl0LnloGg5L/M/ofiRJySTzb4D6/rv+M6+UdPi3FhF1TOpm 39Am7+8tqk1oRajPH2Jz/ySHrGiyWXWvcSuP1/unOwmnIjEDwxn/avbyACldweSsLfi2 ugyiG3tSRNETt6dOuEweK6X1UEDCAhszCaKpkU1f2rcfXycLQWrBRPmMTJgq/Sw7O8C8 d8u+3IceorN6BHcFma4c9jOvXfWsVeld4Hu0a2TJAn7U5VenuuuXUHVWHuGL3VkRLZaF d4vRIqRAkotMIIfsAWl/o5cjHL1wsTjA5nf0F+euanlLcQQCUL4JBdvJVAJg1j5yLBUh 0wFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=h+37ODtn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id u5-20020a67c805000000b0032545b84912si3265252vsk.112.2022.03.28.14.41.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Mar 2022 14:41:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=h+37ODtn; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 824929E9DF; Mon, 28 Mar 2022 14:17:41 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236152AbiC0RdW (ORCPT + 99 others); Sun, 27 Mar 2022 13:33:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40906 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233682AbiC0RdV (ORCPT ); Sun, 27 Mar 2022 13:33:21 -0400 Received: from mail-yb1-xb32.google.com (mail-yb1-xb32.google.com [IPv6:2607:f8b0:4864:20::b32]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C283849C80 for ; Sun, 27 Mar 2022 10:31:41 -0700 (PDT) Received: by mail-yb1-xb32.google.com with SMTP id y142so22328119ybe.11 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=bzPxi3/1py6CNEzrErydR6YCwbUwTJ3/wYKkSrfBIYX5HYyTwkE0Vv27INph0V22L/ B6ecx5jOWAxgVWVhHz0PPokv4nTFQHJLOBQokzLkBbOpnfY9bjWvbqxLq10oMr3+dE85 ntuPY7rUuvWB1BQk9o8p6E60RxoBvxSB7ffM8ws0XZahwaSUgjlCKb8AfjRGyNjBCPq8 jnAX98i4TgL2X6vDopsij4Z/jjZu4956WOkHMbNf2nvGskHkKEdnr5KnAYn1bx/0cxX9 Z4LAszWUk3LXGSIxp4ToSVtUR8MvGpCye54r3300b083B0rAFOXHdZgSKKTr4Mdgni6L n7qg== X-Gm-Message-State: AOAM530EwZcPLlc+R1gtXJnTKomsMuLQKTVb1NUeuTkt2mCFkJBklGCk w3F/fS2HayM7qaSzL2kyadbHHkbCL+T/SOvrbObxaVvR40I= 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-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 >