Wang Hai
5f68457ed1
mm/slub: fix a memory leak in sysfs_slab_add()
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 <hulkci@huawei.com>
Signed-off-by: Wang Hai <wanghai38@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Cc: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Link: http://lkml.kernel.org/r/20200602115033.1054-1-wanghai38@huawei.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-06-20 10:25:05 +02:00
..
2018-08-24 13:09:12 +02:00
2019-03-05 17:58:01 +01:00
2018-10-13 09:27:30 +02:00
2017-11-02 11:10:55 +01:00
2017-06-05 16:59:12 +02:00
2019-06-15 11:54:51 +02:00
2019-08-06 19:05:23 +02:00
2017-11-02 11:10:55 +01:00
2019-10-05 12:48:13 +02:00
2017-11-02 11:10:55 +01:00
2018-09-19 22:43:48 +02:00
2018-02-25 11:08:03 +01:00
2018-09-15 09:45:28 +02:00
2017-11-02 11:10:55 +01:00
2019-11-12 19:18:46 +01:00
2018-03-03 10:24:21 +01:00
2019-07-31 07:28:56 +02:00
2017-11-02 11:10:55 +01:00
2019-01-13 10:01:02 +01:00
2020-03-11 18:02:55 +01:00
2019-11-20 17:59:33 +01:00
2020-05-02 17:24:21 +02:00
2017-05-03 15:52:12 -07:00
2017-11-02 11:10:55 +01:00
2019-12-05 15:37:51 +01:00
2017-09-08 18:26:49 -07:00
2019-06-15 11:54:51 +02:00
2018-02-22 15:42:24 +01:00
2019-06-22 08:16:19 +02:00
2019-07-31 07:28:55 +02:00
2020-05-02 17:24:22 +02:00
2019-06-19 08:20:54 +02:00
2018-10-10 08:54:22 +02:00
2018-02-22 15:42:24 +01:00
2018-03-28 18:24:39 +02:00
2020-04-02 16:34:19 +02:00
2019-12-01 09:14:18 +01:00
2019-03-23 14:35:24 +01:00
2019-05-16 19:42:31 +02:00
2020-04-13 10:34:28 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-04-03 06:25:20 +02:00
2019-05-21 18:50:16 +02:00
2019-07-10 09:54:36 +02:00
2020-01-09 10:17:56 +01:00
2019-07-31 07:28:56 +02:00
2017-11-02 11:10:55 +01:00
2020-03-11 18:03:02 +01:00
2020-06-11 09:22:57 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2020-04-02 16:34:20 +02:00
2019-10-05 12:48:09 +02:00
2020-05-20 08:16:58 +02:00
2017-11-02 11:10:55 +01:00
2019-04-05 22:31:27 +02:00
2019-07-03 13:15:59 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2019-10-29 09:17:39 +01:00
2019-04-05 22:31:28 +02:00
2018-11-13 11:15:08 -08:00
2020-01-23 08:20:32 +01:00
2017-11-24 08:37:04 +01:00
2017-11-02 11:10:55 +01:00
2019-02-12 19:46:05 +01:00
2017-09-27 14:45:57 -07:00
2018-04-08 14:26:29 +02:00
2019-06-15 11:54:59 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-09-09 19:55:53 +02:00
2018-10-13 09:27:22 +02:00
2017-10-03 17:54:24 -07:00
2020-05-20 08:17:04 +02:00
2018-12-01 09:42:51 +01:00
2019-06-15 11:54:51 +02:00
2018-02-22 15:42:23 +01:00
2017-11-02 11:10:55 +01:00
2020-06-20 10:25:05 +02:00
2017-11-02 11:10:55 +01:00
2018-05-16 10:10:27 +02:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-10-03 17:54:24 -07:00
2019-01-26 09:37:06 +01:00
2018-12-08 13:03:40 +01:00
2019-10-11 18:18:34 +02:00
2019-05-31 06:47:12 -07:00
2020-06-20 10:24:59 +02:00
2018-09-19 22:43:48 +02:00
2020-06-03 08:18:11 +02:00
2017-07-10 16:32:31 -07:00
2020-02-28 16:36:12 +01:00
2019-12-17 20:37:57 +01:00
2017-11-02 11:10:55 +01:00
2018-12-01 09:42:54 +01:00
2020-01-09 10:17:54 +01:00
2018-09-05 09:26:30 +02:00