Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp994171ybt; Fri, 19 Jun 2020 20:56:16 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxaTASAmZjPTOS6If9UmoO588TsjYn9wdCs/SFCBvpKY0JpC2PY9nnBt5ovrlg1w2KGd0bC X-Received: by 2002:a17:906:bcf3:: with SMTP id op19mr6366079ejb.208.1592625376487; Fri, 19 Jun 2020 20:56:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592625376; cv=none; d=google.com; s=arc-20160816; b=I5RP5lIGYn/J5BwF8/sQLcA7znFki1IRSWGuRnTsQ2RKdvJw+2GI+n34C9XTdwxko3 SsDmk30yl1FxYi5fH7a8pkzQNtu4vZ7BuZe0Ty55zuB5f0xM5lWYM1x2qbYX5uIi2pGD OyfRN9ziHtcrxZsLt4KfLmfvxNE2V+EXy/iO2U8LP5SKg1jXAXSsso6DE1z8Ca6Cdd+I GcsU2sWTP6EGO05AbAcP5ufBBrK59+qTdeynMjoU0SFpVjPILmNOkwsGgC8+7IvhaG4Q vkVgvzYoLrL8FfVS6LwR45D8EaP5bYMx6FuFwnX0WDfBhgKhLWuv/8CKkAHXz3doJltD mfZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=UUbCkcehEXgyJw43LaPoX6kyu+cGVAXOr0P27oViPV0=; b=QDuHsS0vqdxwa5BvQkEsZu/io8mQAejykyTkd0DowfcUG3mwmQ4WmfbM0ZN8atSMtO NQraOg2hFt19mzxmce9bIUygED7fzJz0wFtdNGL6qvnjam56GKrvPpTe/kn/Om7v6JbO Asb3dv/TC76uyk+IAy4lLvM1uC3k2DOcVGpvLFT6d1/igM19DoeJqXF7DOZu6PGBuQ2N nVmyYKGCbVKDjJN6WAQpsw5j7mxn6EAgKcgDyGicMyufULtFpuSSSxXJfmMAFfwG8SIw ckdTxHmoaeXf/wamEk00crOe4o6gc2MhBzRVo/U/+pr6mNvMvehzTkjNnI+WTZYEUddf DlEw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=eLsCfj3x; 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 n24si4891934ejd.648.2020.06.19.20.55.54; Fri, 19 Jun 2020 20:56:16 -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=@kernel.org header.s=default header.b=eLsCfj3x; 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 S2394764AbgFSQ0r (ORCPT + 99 others); Fri, 19 Jun 2020 12:26:47 -0400 Received: from mail.kernel.org ([198.145.29.99]:51816 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390126AbgFSO4o (ORCPT ); Fri, 19 Jun 2020 10:56:44 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 1C5C421852; Fri, 19 Jun 2020 14:56:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592578604; bh=cNEPnpJuqJuNxVcYVsD15L0dyU2BmeLWUz8WDDfN57w=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eLsCfj3xvz8vz/gQPj7rZysU8EpQ76VpVHG08ka7RJKEFafheO5rwzZaY241Z+Avm U9/4eX1+Wi2lYdZPTTFWaPiBE3GpW5Po3lJsBdy9jXqhVuEwfPyHigjc3M0y8Wckp1 9eBXRJFT5jjdEafN+Q5VB48bLdXGPgoxPV7JOuJo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Hulk Robot , Wang Hai , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Linus Torvalds Subject: [PATCH 4.19 084/267] mm/slub: fix a memory leak in sysfs_slab_add() Date: Fri, 19 Jun 2020 16:31:09 +0200 Message-Id: <20200619141652.922828053@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141648.840376470@linuxfoundation.org> References: <20200619141648.840376470@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wang Hai commit dde3c6b72a16c2db826f54b2d49bdea26c3534a2 upstream. 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: kstrdup+0x35/0x70 mm/util.c:60 kstrdup_const+0x3d/0x50 mm/util.c:82 kvasprintf_const+0x112/0x170 lib/kasprintf.c:48 kobject_set_name_vargs+0x55/0x130 lib/kobject.c:289 kobject_add_varg lib/kobject.c:384 [inline] kobject_init_and_add+0xd8/0x170 lib/kobject.c:473 sysfs_slab_add+0x1d8/0x290 mm/slub.c:5811 __kmem_cache_create+0x50a/0x570 mm/slub.c:4384 create_cache+0x113/0x1e0 mm/slab_common.c:407 kmem_cache_create_usercopy+0x1a1/0x260 mm/slab_common.c:505 kmem_cache_create+0xd/0x10 mm/slab_common.c:564 create_pid_cachep kernel/pid_namespace.c:54 [inline] create_pid_namespace kernel/pid_namespace.c:96 [inline] copy_pid_ns+0x77c/0x8f0 kernel/pid_namespace.c:148 create_new_namespaces+0x26b/0xa30 kernel/nsproxy.c:95 unshare_nsproxy_namespaces+0xa7/0x1e0 kernel/nsproxy.c:229 ksys_unshare+0x3d2/0x770 kernel/fork.c:2969 __do_sys_unshare kernel/fork.c:3037 [inline] __se_sys_unshare kernel/fork.c:3035 [inline] __x64_sys_unshare+0x2d/0x40 kernel/fork.c:3035 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 Signed-off-by: Andrew Morton Cc: Christoph Lameter Cc: Pekka Enberg Cc: David Rientjes Cc: Joonsoo Kim Link: http://lkml.kernel.org/r/20200602115033.1054-1-wanghai38@huawei.com Signed-off-by: Linus Torvalds Signed-off-by: Greg Kroah-Hartman --- mm/slub.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/mm/slub.c +++ b/mm/slub.c @@ -5738,8 +5738,10 @@ static int sysfs_slab_add(struct kmem_ca 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)