Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1231723ybg; Tue, 2 Jun 2020 04:53:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxX5fFiew5kHB2c5KQ+0drNhWYTd2DuPsWBd0cyh4usYau8iD/3sbENjkaiit4rwvmM9J3S X-Received: by 2002:a17:907:9495:: with SMTP id dm21mr22745688ejc.357.1591098793109; Tue, 02 Jun 2020 04:53:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591098793; cv=none; d=google.com; s=arc-20160816; b=WTGNahQBz2cAZxMFiOFPR7t9N7QSrHnRh9Mw6lC8NI8ikQSTCRQlOh7FgKf5Z/b1X2 LlAjsfW+YVSDFmJ5asDCCS0sRWYe565zvAf4WpudY9mnbpK6SGCUfeQrbd/7whEff8pq 8+Bcjd8RTdfQmNZ1YY2WFWbiLYy7yOgUeGRnuTrf7WNdAoFMAFLIumUf3ev4CTQhS6WL S1CfdFU0rr5jsKhhM6dQdI/2QzuXwvKm78lbB0AxyItLgfRexLtkVzpeD1bL9qEX66WZ F68LnXJILN6xiw4OvJHV7xOdKKC6swXnxbdCj31Xrf8AUYkzl/pY3wDbk/Wl122bBpZF BJpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=YPVcgHMhbYH+YNKybZtIDFtatozfwz8lmA7jxEvDAGQ=; b=jeVhYMOWvwYyIGaEoOZ2upWPNFA8Y9o9bZ6DNp/9OyJqjA5rZ62Ji4j9ATaJeboaf9 XkuIYLoHaUPidPJeW4JPaApMWmHEhHYG41cSSmIKxH1gjsv01XLX9ZAnKLdUKBQOhCSb Z50IWO8ueDn7mhDYS0N5imVUypVx2tbI97sfNT922Ok3LI9NXu/TwPVB0ApuVImtISTm wOJ9eXgxake5h8P58CX3Fs99eZPB1LF2+fbfboStZ1VRGbqt1eJuTSLSdlB2OszzWu5N oAhScGF6LB2LhtPi40BUSI37ZSxA9Dkyq8ehXAEtCNT7ALef+dO+ISGk29OI7kfpY3d7 zlIA== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id se27si1144570ejb.340.2020.06.02.04.52.50; Tue, 02 Jun 2020 04:53:13 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726839AbgFBLvA (ORCPT + 99 others); Tue, 2 Jun 2020 07:51:00 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:35532 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726420AbgFBLvA (ORCPT ); Tue, 2 Jun 2020 07:51:00 -0400 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 5EF5B15853ECC4BC46B0; Tue, 2 Jun 2020 19:50:57 +0800 (CST) Received: from huawei.com (10.175.113.133) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.487.0; Tue, 2 Jun 2020 19:50:51 +0800 From: Wang Hai To: , , , CC: , , , , Subject: [PATCH] mm/slub: fix a memory leak in sysfs_slab_add() Date: Tue, 2 Jun 2020 19:50:33 +0800 Message-ID: <20200602115033.1054-1-wanghai38@huawei.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.113.133] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org syzkaller reports for memory leak when kobject_init_and_add() returns an error in the function sysfs_slab_add() [1] When this happened, the function kobject_put() is not called for the corresponding kobject, which potentially leads to memory leak. This patch fixes the issue by calling kobject_put() even if kobject_init_and_add() fails. [1] BUG: memory leak unreferenced object 0xffff8880a6d4be88 (size 8): comm "syz-executor.3", pid 946, jiffies 4295772514 (age 18.396s) hex dump (first 8 bytes): 70 69 64 5f 33 00 ff ff pid_3... backtrace: [<00000000a0980095>] kstrdup+0x35/0x70 mm/util.c:60 [<00000000ef0cff3f>] kstrdup_const+0x3d/0x50 mm/util.c:82 [<00000000e2461486>] kvasprintf_const+0x112/0x170 lib/kasprintf.c:48 [<000000005d749e93>] kobject_set_name_vargs+0x55/0x130 lib/kobject.c:289 [<0000000094e31519>] kobject_add_varg lib/kobject.c:384 [inline] [<0000000094e31519>] kobject_init_and_add+0xd8/0x170 lib/kobject.c:473 [<0000000060f13e32>] sysfs_slab_add+0x1d8/0x290 mm/slub.c:5811 [<00000000fe1d9a22>] __kmem_cache_create+0x50a/0x570 mm/slub.c:4384 [<000000006a71a1b4>] create_cache+0x113/0x1e0 mm/slab_common.c:407 [<0000000089491438>] kmem_cache_create_usercopy+0x1a1/0x260 mm/slab_common.c:505 [<000000008c992595>] kmem_cache_create+0xd/0x10 mm/slab_common.c:564 [<000000005320c4b6>] create_pid_cachep kernel/pid_namespace.c:54 [inline] [<000000005320c4b6>] create_pid_namespace kernel/pid_namespace.c:96 [inline] [<000000005320c4b6>] copy_pid_ns+0x77c/0x8f0 kernel/pid_namespace.c:148 [<00000000fc8e1a2b>] create_new_namespaces+0x26b/0xa30 kernel/nsproxy.c:95 [<0000000080f0c9a5>] unshare_nsproxy_namespaces+0xa7/0x1e0 kernel/nsproxy.c:229 [<0000000007e05aea>] ksys_unshare+0x3d2/0x770 kernel/fork.c:2969 [<00000000e04c8e4b>] __do_sys_unshare kernel/fork.c:3037 [inline] [<00000000e04c8e4b>] __se_sys_unshare kernel/fork.c:3035 [inline] [<00000000e04c8e4b>] __x64_sys_unshare+0x2d/0x40 kernel/fork.c:3035 [<000000005c4707c7>] do_syscall_64+0xa1/0x530 arch/x86/entry/common.c:295 Fixes: 80da026a8e5d ("mm/slub: fix slab double-free in case of duplicate sysfs filename") Reported-by: Hulk Robot Signed-off-by: Wang Hai --- mm/slub.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/slub.c b/mm/slub.c index b762450f..63bd39c 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -5809,8 +5809,10 @@ static int sysfs_slab_add(struct kmem_cache *s) s->kobj.kset = kset; err = kobject_init_and_add(&s->kobj, &slab_ktype, NULL, "%s", name); - if (err) + if (err) { + kobject_put(&s->kobj); goto out; + } err = sysfs_create_group(&s->kobj, &slab_attr_group); if (err) -- 1.8.3.1