linux-stable/block
Ye Bin 654870789c blk-mq: fix possible memleak when register 'hctx' failed
[ Upstream commit 4b7a21c57b ]

There's issue as follows when do fault injection test:
unreferenced object 0xffff888132a9f400 (size 512):
  comm "insmod", pid 308021, jiffies 4324277909 (age 509.733s)
  hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 08 f4 a9 32 81 88 ff ff  ...........2....
    08 f4 a9 32 81 88 ff ff 00 00 00 00 00 00 00 00  ...2............
  backtrace:
    [<00000000e8952bb4>] kmalloc_node_trace+0x22/0xa0
    [<00000000f9980e0f>] blk_mq_alloc_and_init_hctx+0x3f1/0x7e0
    [<000000002e719efa>] blk_mq_realloc_hw_ctxs+0x1e6/0x230
    [<000000004f1fda40>] blk_mq_init_allocated_queue+0x27e/0x910
    [<00000000287123ec>] __blk_mq_alloc_disk+0x67/0xf0
    [<00000000a2a34657>] 0xffffffffa2ad310f
    [<00000000b173f718>] 0xffffffffa2af824a
    [<0000000095a1dabb>] do_one_initcall+0x87/0x2a0
    [<00000000f32fdf93>] do_init_module+0xdf/0x320
    [<00000000cbe8541e>] load_module+0x3006/0x3390
    [<0000000069ed1bdb>] __do_sys_finit_module+0x113/0x1b0
    [<00000000a1a29ae8>] do_syscall_64+0x35/0x80
    [<000000009cd878b0>] entry_SYSCALL_64_after_hwframe+0x46/0xb0

Fault injection context as follows:
 kobject_add
 blk_mq_register_hctx
 blk_mq_sysfs_register
 blk_register_queue
 device_add_disk
 null_add_dev.part.0 [null_blk]

As 'blk_mq_register_hctx' may already add some objects when failed halfway,
but there isn't do fallback, caller don't know which objects add failed.
To solve above issue just do fallback when add objects failed halfway in
'blk_mq_register_hctx'.

Signed-off-by: Ye Bin <yebin10@huawei.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20221117022940.873959-1-yebin@huaweicloud.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-01-07 12:07:33 +01:00
..
partitions partitions/aix: fix usage of uninitialized lv_info and lvname structures 2018-09-19 22:47:15 +02:00
Kconfig
Kconfig.iosched
Makefile
badblocks.c badblocks: fix wrong return value in badblocks_set if badblocks are disabled 2017-12-20 10:07:29 +01:00
bio-integrity.c bio-integrity: Do not allocate integrity context for bio w/o data 2018-04-13 19:48:18 +02:00
bio.c block-map: add __GFP_ZERO flag for alloc_page in function bio_copy_kern 2022-06-06 08:19:46 +02:00
blk-cgroup.c block,blkcg: use __GFP_NOWARN for best-effort allocations in blkcg 2018-09-19 22:47:11 +02:00
blk-core.c blktrace: Fix potential deadlock between delete & sysfs ops 2020-05-20 08:15:30 +02:00
blk-exec.c
blk-flush.c
blk-integrity.c
blk-ioc.c
blk-lib.c block: fix infinite loop if the device loses discard capability 2018-12-29 13:40:14 +01:00
blk-map.c block: fix memleak when __blk_rq_map_user_iov() is failed 2020-01-12 11:24:24 +01:00
blk-merge.c block: don't use bio->bi_vcnt to figure out segment number 2020-01-29 10:24:15 +01:00
blk-mq-cpumap.c
blk-mq-pci.c
blk-mq-sysfs.c blk-mq: fix possible memleak when register 'hctx' failed 2023-01-07 12:07:33 +01:00
blk-mq-tag.c blk-mq: Allow blocking queue tag iter callbacks 2020-04-13 10:32:52 +02:00
blk-mq-tag.h
blk-mq.c blk-mq: move blk_mq_update_nr_hw_queues synchronize_rcu call 2020-06-20 10:24:19 +02:00
blk-mq.h
blk-settings.c blk-settings: align max_sectors on "logical_block_size" boundary 2021-03-03 17:44:41 +01:00
blk-softirq.c
blk-sysfs.c
blk-tag.c
blk-throttle.c blk-throttle: fix UAF by deleteing timer in blk_throtl_exit() 2021-09-26 13:36:19 +02:00
blk-timeout.c
blk.h
bounce.c
bsg-lib.c
bsg.c
cfq-iosched.c block,blkcg: use __GFP_NOWARN for best-effort allocations in blkcg 2018-09-19 22:47:11 +02:00
cmdline-parser.c
compat_ioctl.c block/compat_ioctl: fix range check in BLKGETSIZE 2022-04-27 13:14:12 +02:00
deadline-iosched.c
elevator.c
genhd.c block: fix use-after-free in disk_part_iter_next 2021-01-17 13:57:55 +01:00
ioctl.c
ioprio.c block: fix ioprio_get(IOPRIO_WHO_PGRP) vs setuid(2) 2021-12-14 10:04:48 +01:00
noop-iosched.c
partition-generic.c block: unhash blkdev part inode when the part is deleted 2023-01-07 12:07:10 +01:00
scsi_ioctl.c
t10-pi.c