Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp635112ybe; Thu, 19 Sep 2019 01:02:35 -0700 (PDT) X-Google-Smtp-Source: APXvYqxe/qapQ1xKYb1OKvfjZiS7HKhqP+eaxId4683xtlhG2a6Z4qccps1lydKn3tJSN1HzCURX X-Received: by 2002:a17:906:5644:: with SMTP id v4mr12928234ejr.52.1568880155844; Thu, 19 Sep 2019 01:02:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568880155; cv=none; d=google.com; s=arc-20160816; b=M1rjk6hIz3pEB6WhqolJGSFxo8k6diqDGLH85GYLgqxUM8eqxbjQuWHpCqgazKdbd9 gtkDEmvyBs+WuwWnPF5+W1iDJ8CqKsoW2VQgYd5ecKHz5pVXST5nrqiuJAtKa9ZS96PH a8mrpD8D9PGDGm0SVEnhh9f0+WXwrEbVAwftH3VyoeCZilF1tKlqJop5tNNMVPTViRFD weKJIVblxRF3Ii4ThAL8RJq0b5KzLo4e7LZFsQGB84SKkzNjl27gpKnNme6Pmg3yngzv 9orgeMOSy1GM/8Pxn0iffPk7/+RVKHCugmwkkC161td9GMex2MjQA1c7e8AtdNS07vag 7KZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Rvn6l+4CMtsztWTxkmjHyCK4XVDTrU7M/UklIZV3tDc=; b=APk2eNjEZFLdvhnwI4sV/Mk483coWJv90SZnO8x6WUOWH/nfbhsAvIjZE9VxHpx24S xCgKJG1OUGWfBNjbz0s3Lj2IrwkYWXgnqfWx9VN1ExK6nH2UnGMIPYqJfVrhQhchEQ/H P7YMuUSF1Srl0seba1/UCef5CNOamVOzDlNFyy0BomUpfato7yQxQApsDu07ur/nGec3 HvsQ0n2wRyfHrVuRZpWoNgxnZPdVkgYJ/JbPeGrHzRv3t9h2ZTQm540/RzUfDgpRJAIa MCn3rj7Jxa2nroLeZVhL/sCq9y55uYB7secpv2P/InjXDqYjIxQq70rD3/6FD6OOxI0l +lcA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=QmU0TeVW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i38si4837321eda.64.2019.09.19.01.02.09; Thu, 19 Sep 2019 01:02:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=QmU0TeVW; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730958AbfISH7V (ORCPT + 99 others); Thu, 19 Sep 2019 03:59:21 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:46219 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727033AbfISH7V (ORCPT ); Thu, 19 Sep 2019 03:59:21 -0400 Received: by mail-lj1-f194.google.com with SMTP id e17so2534483ljf.13 for ; Thu, 19 Sep 2019 00:59:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Rvn6l+4CMtsztWTxkmjHyCK4XVDTrU7M/UklIZV3tDc=; b=QmU0TeVWL5IYmtIZRAwqGPyWQMU8rpVXNgt+0+UT/mkl4zCvGEyJUbzeytlvYSv505 Zl8hAKMkPHsk2I/ZwsNir1CKmOJ0Yca3B6uny3G3gm+6FPaoFa/ol9k4T+qMEHpaQ6J8 9UFPqFkGsXuKev14AZhgBc02OcKZg/OKcf3Qx7fNU42kQSfF0/Wax2EbSehc8v60xfsT EV1osoQakUXIx1JSca97nX6JKhVu9Y83BISyZASNSxM645Hr3Z1oGnQid68AwZfN0UP9 x6m9tWFPSGpoK/Q6S6Zn/kmKjqclJviKLK80C1Fp2xYqY102J3ypspUKCaDpJAT8huRD Km0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Rvn6l+4CMtsztWTxkmjHyCK4XVDTrU7M/UklIZV3tDc=; b=buNM7JvFma/AxcfQ5GvpoTmd+gfhRr5Pt7LCjz/OO1I7WiArjC8h7A1CkMUSHiAplB sUO1NnUirmUmT75w3To/6J1RzYMuQyKN+s9INq+tEU2U/MiszIjMN1II6sY1A/35U61P nQk2G/0DF7XzajK4Gpu9AN+wXwZqPapJQw+Hypnt900qeRZWc6c/VdBIAD1BN0Ika48S rz4CPLWAu/QRKb/AUYYAyJFYcUZh3CLMbI5w1gBBVSuiDidxBy6cOlO/RggfaQneNxJ+ VLoV4mgkpBua8/HyZKboqfJlHAwHzEIv10rzyvHlvOsoreamXo/Z3Fo1By6i5SxcktiC W+iA== X-Gm-Message-State: APjAAAVt/ffejA9d5ZuZpT3ld3kFPHnTNtKI95m1gOF5dZpYQy31AwNM s5+U3Y0ebTvWN14M1wrtFALMDyP7leMZgg4h/F8= X-Received: by 2002:a2e:5d98:: with SMTP id v24mr4784754lje.56.1568879958922; Thu, 19 Sep 2019 00:59:18 -0700 (PDT) MIME-Version: 1.0 References: <20190917185352.44cf285d3ebd9e64548de5de@gmail.com> In-Reply-To: From: Vitaly Wool Date: Thu, 19 Sep 2019 09:59:07 +0200 Message-ID: Subject: Re: [PATCH] z3fold: fix memory leak in kmem cache To: Vlastimil Babka Cc: Linux-MM , Andrew Morton , LKML , Dan Streetman , Markus Linnala , stable@kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Sep 18, 2019 at 9:35 AM Vlastimil Babka wrote: > > On 9/17/19 5:53 PM, Vitaly Wool wrote: > > Currently there is a leak in init_z3fold_page() -- it allocates > > handles from kmem cache even for headless pages, but then they are > > never used and never freed, so eventually kmem cache may get > > exhausted. This patch provides a fix for that. > > > > Reported-by: Markus Linnala > > Signed-off-by: Vitaly Wool > > Can a Fixes: commit be pinpointed, and CC stable added? Fixes: 7c2b8baa61fe578 "mm/z3fold.c: add structure for buddy handles" Best regards, Vitaly > > --- > > mm/z3fold.c | 15 +++++++++------ > > 1 file changed, 9 insertions(+), 6 deletions(-) > > > > diff --git a/mm/z3fold.c b/mm/z3fold.c > > index 6397725b5ec6..7dffef2599c3 100644 > > --- a/mm/z3fold.c > > +++ b/mm/z3fold.c > > @@ -301,14 +301,11 @@ static void z3fold_unregister_migration(struct z3fold_pool *pool) > > } > > > > /* Initializes the z3fold header of a newly allocated z3fold page */ > > -static struct z3fold_header *init_z3fold_page(struct page *page, > > +static struct z3fold_header *init_z3fold_page(struct page *page, bool headless, > > struct z3fold_pool *pool, gfp_t gfp) > > { > > struct z3fold_header *zhdr = page_address(page); > > - struct z3fold_buddy_slots *slots = alloc_slots(pool, gfp); > > - > > - if (!slots) > > - return NULL; > > + struct z3fold_buddy_slots *slots; > > > > INIT_LIST_HEAD(&page->lru); > > clear_bit(PAGE_HEADLESS, &page->private); > > @@ -316,6 +313,12 @@ static struct z3fold_header *init_z3fold_page(struct page *page, > > clear_bit(NEEDS_COMPACTING, &page->private); > > clear_bit(PAGE_STALE, &page->private); > > clear_bit(PAGE_CLAIMED, &page->private); > > + if (headless) > > + return zhdr; > > + > > + slots = alloc_slots(pool, gfp); > > + if (!slots) > > + return NULL; > > > > spin_lock_init(&zhdr->page_lock); > > kref_init(&zhdr->refcount); > > @@ -962,7 +965,7 @@ static int z3fold_alloc(struct z3fold_pool *pool, size_t size, gfp_t gfp, > > if (!page) > > return -ENOMEM; > > > > - zhdr = init_z3fold_page(page, pool, gfp); > > + zhdr = init_z3fold_page(page, bud == HEADLESS, pool, gfp); > > if (!zhdr) { > > __free_page(page); > > return -ENOMEM; > > >