Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp4155812pxv; Mon, 19 Jul 2021 18:42:44 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxtJopTR+SU61kOENkJJLoUs/qc45O378erEJGkU6LDtMA0R/+EqaO0bem9k8eADcZexdEy X-Received: by 2002:a05:6e02:12a4:: with SMTP id f4mr19069886ilr.102.1626745364576; Mon, 19 Jul 2021 18:42:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1626745364; cv=none; d=google.com; s=arc-20160816; b=EVIPaa58z/KCOxtAXZjt2oXTW8qzWRJHNA8gncDmBisV7kDMIT/2lViIC1SN+tAXGV K8EcXvmHwpczv0NXyW/ncLusWU0vE9igbhDiWU9DoZb1qrWkcTnTbWbpGGUzmEkYva+n wdGbNEQDN+eKqXyf1jNEBcUyAUuzgr2pAdi+/loke+pbLv7HCZ//ArCS68YEgbGE7yuM 4j4NLeg9OmWjBYQNEh9Td4gl/HJmZ8QpuiZ37qa+ujC7COnFzopcRLOnxEqDE1ML2Ovh woSMh30Zqtf6v+uQrVsacPi13gttRlNn9LXQL5YFc0IRPORkoUl49RDoM99jFeSkDMTq A30A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=xWUgNKg9v0SL2ucqkW27LpGvuYZywdiR2txSVVn23vM=; b=kblkBMq5Xl6YJi85hSB4s8t1Xhw/nMZRjrKOqN5R+7gvXAtiqEMY9Z6kHHyVDtOs97 Ar0AhflJz0dA/d3H25rO3+uV9KC27WdxQWMiroW+npBMVi9LQoullrHwkEC0yH8wUlpN 5I91lXFsmMr/7DL4IyjEOZgXfw5SkU/CZmy3IUmP1oTxFG9ZPwI4hoI07SSV72CieIq+ MNcLqzTv9FojpOoPsPEJg9gCfuwYkHWQ5qkbZGWCN5XVaW3ytbp9eh7+3MaLsPtofnOl KlF1t7rId7LEGuBtg9nKsQ8XcBJj0hPTX3y+zlfLOnBsAZ+NMTDqwsMkLfnglMMCzlXz ToUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=sHUuRkez; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d17si3121154ilf.150.2021.07.19.18.42.33; Mon, 19 Jul 2021 18:42:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=sHUuRkez; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244597AbhGSO5J (ORCPT + 99 others); Mon, 19 Jul 2021 10:57:09 -0400 Received: from mail.kernel.org ([198.145.29.99]:55638 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244400AbhGSOgf (ORCPT ); Mon, 19 Jul 2021 10:36:35 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8047F6120C; Mon, 19 Jul 2021 15:16:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1626707820; bh=lbYxqRQqaL2rsRK7+nPGpfIHnAPhEYU8gnkgmXGuNmY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=sHUuRkezgKJJobVUes4ye1BBREOIc3QDljQSElrToB3oaRcM+jy9ckTeMlQrC6+eC 1iD9t4uhxCDNkuZnIHHJ4xdAtllr9h9wCdWiAH8LIVEziW9PxJxVxcXeidVhjmgmon tOAYy5uWBFieCWlv/czG+s13fRbg8jRV/wqalglM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Alexander Aring , David Teigland , Sasha Levin Subject: [PATCH 4.14 068/315] fs: dlm: fix memory leak when fenced Date: Mon, 19 Jul 2021 16:49:17 +0200 Message-Id: <20210719144945.091301379@linuxfoundation.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210719144942.861561397@linuxfoundation.org> References: <20210719144942.861561397@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Alexander Aring [ Upstream commit 700ab1c363c7b54c9ea3222379b33fc00ab02f7b ] I got some kmemleak report when a node was fenced. The user space tool dlm_controld will therefore run some rmdir() in dlm configfs which was triggering some memleaks. This patch stores the sps and cms attributes which stores some handling for subdirectories of the configfs cluster entry and free them if they get released as the parent directory gets freed. unreferenced object 0xffff88810d9e3e00 (size 192): comm "dlm_controld", pid 342, jiffies 4294698126 (age 55438.801s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 73 70 61 63 65 73 00 00 ........spaces.. 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [<00000000db8b640b>] make_cluster+0x5d/0x360 [<000000006a571db4>] configfs_mkdir+0x274/0x730 [<00000000b094501c>] vfs_mkdir+0x27e/0x340 [<0000000058b0adaf>] do_mkdirat+0xff/0x1b0 [<00000000d1ffd156>] do_syscall_64+0x40/0x80 [<00000000ab1408c8>] entry_SYSCALL_64_after_hwframe+0x44/0xae unreferenced object 0xffff88810d9e3a00 (size 192): comm "dlm_controld", pid 342, jiffies 4294698126 (age 55438.801s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 63 6f 6d 6d 73 00 00 00 ........comms... 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [<00000000a7ef6ad2>] make_cluster+0x82/0x360 [<000000006a571db4>] configfs_mkdir+0x274/0x730 [<00000000b094501c>] vfs_mkdir+0x27e/0x340 [<0000000058b0adaf>] do_mkdirat+0xff/0x1b0 [<00000000d1ffd156>] do_syscall_64+0x40/0x80 [<00000000ab1408c8>] entry_SYSCALL_64_after_hwframe+0x44/0xae Signed-off-by: Alexander Aring Signed-off-by: David Teigland Signed-off-by: Sasha Levin --- fs/dlm/config.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/fs/dlm/config.c b/fs/dlm/config.c index 472f4f835d3e..4fb070b7f00f 100644 --- a/fs/dlm/config.c +++ b/fs/dlm/config.c @@ -80,6 +80,9 @@ struct dlm_cluster { unsigned int cl_new_rsb_count; unsigned int cl_recover_callbacks; char cl_cluster_name[DLM_LOCKSPACE_LEN]; + + struct dlm_spaces *sps; + struct dlm_comms *cms; }; static struct dlm_cluster *config_item_to_cluster(struct config_item *i) @@ -356,6 +359,9 @@ static struct config_group *make_cluster(struct config_group *g, if (!cl || !sps || !cms) goto fail; + cl->sps = sps; + cl->cms = cms; + config_group_init_type_name(&cl->group, name, &cluster_type); config_group_init_type_name(&sps->ss_group, "spaces", &spaces_type); config_group_init_type_name(&cms->cs_group, "comms", &comms_type); @@ -405,6 +411,9 @@ static void drop_cluster(struct config_group *g, struct config_item *i) static void release_cluster(struct config_item *i) { struct dlm_cluster *cl = config_item_to_cluster(i); + + kfree(cl->sps); + kfree(cl->cms); kfree(cl); } -- 2.30.2