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 7079ECFC501 for ; Tue, 15 Oct 2024 01:13:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0D7116B0085; Mon, 14 Oct 2024 21:13:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 087506B0088; Mon, 14 Oct 2024 21:13:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id EB8166B0089; Mon, 14 Oct 2024 21:13:36 -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 CDFE16B0085 for ; Mon, 14 Oct 2024 21:13:36 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 2514980652 for ; Tue, 15 Oct 2024 01:13:29 +0000 (UTC) X-FDA: 82674063822.26.BB3667C Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) by imf08.hostedemail.com (Postfix) with ESMTP id 5ADEB16000B for ; Tue, 15 Oct 2024 01:13:27 +0000 (UTC) Authentication-Results: imf08.hostedemail.com; dkim=none; spf=pass (imf08.hostedemail.com: domain of chenridong@huawei.com designates 45.249.212.190 as permitted sender) smtp.mailfrom=chenridong@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728954671; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jR2bdu3VT8Pc2axpnMA2qR68zX3qG0vwTjyoED2K/GQ=; b=29MACINRaLxeavXMFo/eSabTOiwbildAWvw4cjx8CAsL6cBmbX0Q9Fl9z91HqnPMcsfpyQ MVRAYFk5CoOVjkJw6IyMw16YJYMxD84xqkUb5BxLZQ2/h0z5R0yd9rldj47+iLGDq7fFvn WhFYHIZDxbZ+SbwcflokUbNcS8cygKY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728954671; a=rsa-sha256; cv=none; b=DvVru1W7WURsKyO6q3v4EXnCJn1FOQa/zGTw951WzSwdLWCeskjR8lDSng/URVNOCbjiIy lR21evLPopIs9c69Vqi1zXH/s93a1YVOitXNf8Ppuh7WFS2VYZLK5v+pnCxlCK4d15EqGq N7zFkPfty2mCIG9k2Fvv5v/oCCRUP8Y= ARC-Authentication-Results: i=1; imf08.hostedemail.com; dkim=none; spf=pass (imf08.hostedemail.com: domain of chenridong@huawei.com designates 45.249.212.190 as permitted sender) smtp.mailfrom=chenridong@huawei.com; dmarc=pass (policy=quarantine) header.from=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.214]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4XSGKX4Plrz2DdZD; Tue, 15 Oct 2024 09:12:16 +0800 (CST) Received: from kwepemd100013.china.huawei.com (unknown [7.221.188.163]) by mail.maildlp.com (Postfix) with ESMTPS id 0B5901A016C; Tue, 15 Oct 2024 09:13:29 +0800 (CST) Received: from [10.67.109.79] (10.67.109.79) by kwepemd100013.china.huawei.com (7.221.188.163) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 15 Oct 2024 09:13:28 +0800 Message-ID: Date: Tue, 15 Oct 2024 09:13:27 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] mm: shrinker: avoid memleak in alloc_shrinker_info To: "Kirill A. Shutemov" , Chen Ridong CC: , , , , , , , References: <20241014032336.482088-1-chenridong@huaweicloud.com> Content-Language: en-US From: chenridong In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.67.109.79] X-ClientProxiedBy: dggems701-chm.china.huawei.com (10.3.19.178) To kwepemd100013.china.huawei.com (7.221.188.163) X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 5ADEB16000B X-Stat-Signature: xx3e31i3eypi3jsr6c5hnp6p3o6kraw8 X-HE-Tag: 1728954807-505159 X-HE-Meta: U2FsdGVkX19MX6WCWcgkYmrvKhHJY9ol2rAkjx0c+XWLVdG81HwULgnl0TxmOwmZa8eShlkAuKaL0w0jSOi2skaWFK1Fsh8obH5WA6YIm/N815ZGvCVasWeGTp/0W/KFo2YFs/Iyd3Nn+nGCkreaQDNtrNJir7KlD46LUSjv+QZ2BG1slwm4nfYYFKMdw/gAtFmAIPiGr+D/iq3V4/Zu0O414/Zg+HtFGs4JQJSOe4BcC5CIUfKO9qZWGaZmyLWm4++E8P7Ct8ha+cDz0k/pX9zdoPCqtf6xJ+aH4+TQeYzRSejuoOjA7WCRKwvTqyvSuBEgYXcuDIb2wct3I2w8akT2jwi9U+lopzMJlMy4XSTvytcfLX8zkX8NWKC94CHYM2r0m1fAvPbDHzmnXbNwm5yILojjMe+GLzXIg+U+yqaF9XOZjNRzQWzGexhubkZ85A9n2P/UHBmVVVpjlszCir9GAXYBUZ5ztjQhOOCIQ3l63BST4gSnLt1f3Jic7ggBrD8SxO17HWC9o6TFLqWhXiJFapck2EYdlcGaaSlhVqvEQEXn5JUARU6hNrbC6HiPkZH0C6NOOWG5/XQDGCwm5n1SR2pFtw/iBEDQ8sg9ZtjG3QCzFTURUqfInhRbzV+gq/uAVMtBElimmTR2D5PWTndx4zU3IGQEW0YGMPl7Clf9CXyVUzOJnpajuWqHyWBy5ipGoogGWD2W27dRhJwSkJoYT4KtougpHo8Z5lgN02PF+lKPL0REcYKXut2E21E+LSSe0vtpwpgC1NCv6EiWftYL9F4ksIplGDQBWQXZf9xzHYS7uYaMst0rqhgzHUOyuQ+5sq4yuL13/i/xNIUfrj868yXhOaNt3Y8SrlpCIB8p/7p6MAQ4cAhNCsCtpbE4WsJBoMvw3pe3pZTc6qa83I7QSGlgZZi/nDgnyKlZUs1Nlnuy+ReLa6lj2hWgm6jg+kIwv32Po/UyXZ5ghUF Zn3S5lnp 5I3NNNKRJPPlNqexTBaKGk0fplC4iHYNXAUAUR36zxIXGT8zzdJOW2QmhGjM7/NMZB9TdjhNGaGBmsHj6m+xPf/FsjTfZfUQnNjQwuC8jbL6LTpgOxbeRx1LID6SoqTOjwqK0lGeFqBotu+EUuY++YMddHTOXBDn8EIv+/yIyzlOXBBkmOC9YwiE2QsTb9Ab14PR6GCD9+OzwuQh1nWFf8ZhmqQ/wIegMYjQydqenPLf3nbystBdDls7Z8g== 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: List-Subscribe: List-Unsubscribe: On 2024/10/14 19:29, Kirill A. Shutemov wrote: > On Mon, Oct 14, 2024 at 03:23:36AM +0000, Chen Ridong wrote: >> From: Chen Ridong >> >> A memleak was found as bellow: >> >> unreferenced object 0xffff8881010d2a80 (size 32): >> comm "mkdir", pid 1559, jiffies 4294932666 >> hex dump (first 32 bytes): >> 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ >> 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @............... >> backtrace (crc 2e7ef6fa): >> [] __kmalloc_node_noprof+0x394/0x470 >> [] alloc_shrinker_info+0x7b/0x1a0 >> [] mem_cgroup_css_online+0x11a/0x3b0 >> [] online_css+0x29/0xa0 >> [] cgroup_apply_control_enable+0x20d/0x360 >> [] cgroup_mkdir+0x168/0x5f0 >> [] kernfs_iop_mkdir+0x5e/0x90 >> [] vfs_mkdir+0x144/0x220 >> [] do_mkdirat+0x87/0x130 >> [] __x64_sys_mkdir+0x49/0x70 >> [] do_syscall_64+0x68/0x140 >> [] entry_SYSCALL_64_after_hwframe+0x76/0x7e >> >> In the alloc_shrinker_info function, when shrinker_unit_alloc return >> err, the info won't be freed. Just fix it. >> >> Fixes: 307bececcd12 ("mm: shrinker: add a secondary array for shrinker_info::{map, nr_deferred}") >> Signed-off-by: Chen Ridong >> --- >> mm/shrinker.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/mm/shrinker.c b/mm/shrinker.c >> index dc5d2a6fcfc4..92270413190d 100644 >> --- a/mm/shrinker.c >> +++ b/mm/shrinker.c >> @@ -97,6 +97,7 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) >> >> err: >> mutex_unlock(&shrinker_mutex); >> + kvfree(info); >> free_shrinker_info(memcg); >> return -ENOMEM; >> } > > NAK. If in the future there going to one more error case after > rcu_assign_pointer() we will end up with double free. > > This should be safer: > > diff --git a/mm/shrinker.c b/mm/shrinker.c > index dc5d2a6fcfc4..763fd556bc7d 100644 > --- a/mm/shrinker.c > +++ b/mm/shrinker.c > @@ -87,8 +87,10 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) > if (!info) > goto err; > info->map_nr_max = shrinker_nr_max; > - if (shrinker_unit_alloc(info, NULL, nid)) > + if (shrinker_unit_alloc(info, NULL, nid)) { > + kvfree(info); > goto err; > + } > rcu_assign_pointer(memcg->nodeinfo[nid]->shrinker_info, info); > } > mutex_unlock(&shrinker_mutex); This is what I sent in v1. Muchun thinks it's better to do the similar thing in the same way. Thanks, Ridong