This is a note to let you know that I've just added the patch titled floppy: Fix memory leak in do_floppy_init() to the 6.0-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: floppy-fix-memory-leak-in-do_floppy_init.patch and it can be found in the queue-6.0 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@xxxxxxxxxxxxxxx> know about it. >From f8ace2e304c5dd8a7328db9cd2b8a4b1b98d83ec Mon Sep 17 00:00:00 2001 From: Yuan Can <yuancan@xxxxxxxxxx> Date: Mon, 31 Oct 2022 12:04:43 +0000 Subject: floppy: Fix memory leak in do_floppy_init() From: Yuan Can <yuancan@xxxxxxxxxx> commit f8ace2e304c5dd8a7328db9cd2b8a4b1b98d83ec upstream. A memory leak was reported when floppy_alloc_disk() failed in do_floppy_init(). unreferenced object 0xffff888115ed25a0 (size 8): comm "modprobe", pid 727, jiffies 4295051278 (age 25.529s) hex dump (first 8 bytes): 00 ac 67 5b 81 88 ff ff ..g[.... backtrace: [<000000007f457abb>] __kmalloc_node+0x4c/0xc0 [<00000000a87bfa9e>] blk_mq_realloc_tag_set_tags.part.0+0x6f/0x180 [<000000006f02e8b1>] blk_mq_alloc_tag_set+0x573/0x1130 [<0000000066007fd7>] 0xffffffffc06b8b08 [<0000000081f5ac40>] do_one_initcall+0xd0/0x4f0 [<00000000e26d04ee>] do_init_module+0x1a4/0x680 [<000000001bb22407>] load_module+0x6249/0x7110 [<00000000ad31ac4d>] __do_sys_finit_module+0x140/0x200 [<000000007bddca46>] do_syscall_64+0x35/0x80 [<00000000b5afec39>] entry_SYSCALL_64_after_hwframe+0x46/0xb0 unreferenced object 0xffff88810fc30540 (size 32): comm "modprobe", pid 727, jiffies 4295051278 (age 25.529s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [<000000007f457abb>] __kmalloc_node+0x4c/0xc0 [<000000006b91eab4>] blk_mq_alloc_tag_set+0x393/0x1130 [<0000000066007fd7>] 0xffffffffc06b8b08 [<0000000081f5ac40>] do_one_initcall+0xd0/0x4f0 [<00000000e26d04ee>] do_init_module+0x1a4/0x680 [<000000001bb22407>] load_module+0x6249/0x7110 [<00000000ad31ac4d>] __do_sys_finit_module+0x140/0x200 [<000000007bddca46>] do_syscall_64+0x35/0x80 [<00000000b5afec39>] entry_SYSCALL_64_after_hwframe+0x46/0xb0 If the floppy_alloc_disk() failed, disks of current drive will not be set, thus the lastest allocated set->tag cannot be freed in the error handling path. A simple call graph shown as below: floppy_module_init() floppy_init() do_floppy_init() for (drive = 0; drive < N_DRIVE; drive++) blk_mq_alloc_tag_set() blk_mq_alloc_tag_set_tags() blk_mq_realloc_tag_set_tags() # set->tag allocated floppy_alloc_disk() blk_mq_alloc_disk() # error occurred, disks failed to allocated ->out_put_disk: for (drive = 0; drive < N_DRIVE; drive++) if (!disks[drive][0]) # the last disks is not set and loop break break; blk_mq_free_tag_set() # the latest allocated set->tag leaked Fix this problem by free the set->tag of current drive before jump to error handling path. Cc: stable@xxxxxxxxxxxxxxx Fixes: 302cfee15029 ("floppy: use a separate gendisk for each media format") Signed-off-by: Yuan Can <yuancan@xxxxxxxxxx> [efremov: added stable list, changed title] Signed-off-by: Denis Efremov <efremov@xxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/block/floppy.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c @@ -4593,8 +4593,10 @@ static int __init do_floppy_init(void) goto out_put_disk; err = floppy_alloc_disk(drive, 0); - if (err) + if (err) { + blk_mq_free_tag_set(&tag_sets[drive]); goto out_put_disk; + } timer_setup(&motor_off_timer[drive], motor_off_callback, 0); } Patches currently in stable-queue which might be from yuancan@xxxxxxxxxx are queue-6.0/drm-rockchip-use-pm_runtime_resume_and_get-instead-o.patch queue-6.0/media-amphion-fix-error-handling-in-vpu_driver_init.patch queue-6.0/asoc-qcom-add-checks-for-devm_kcalloc.patch queue-6.0/drivers-net-qlcnic-fix-potential-memory-leak-in-qlcn.patch queue-6.0/power-supply-ab8500-fix-error-handling-in-ab8500_cha.patch queue-6.0/floppy-fix-memory-leak-in-do_floppy_init.patch queue-6.0/drivers-perf-marvell_cn10k-fix-hotplug-callback-leak.patch queue-6.0/regulator-qcom-labibb-fix-missing-of_node_put-in-qco.patch queue-6.0/serial-sunsab-fix-error-handling-in-sunsab_init.patch queue-6.0/iommu-fsl_pamu-fix-resource-leak-in-fsl_pamu_probe.patch queue-6.0/platform-chrome-cros_usbpd_notify-fix-error-handling.patch queue-6.0/media-platform-exynos4-is-fix-error-handling-in-fimc.patch queue-6.0/wifi-nl80211-add-checks-for-nla_nest_start-in-nl8021.patch queue-6.0/remoteproc-qcom_q6v5_pas-fix-missing-of_node_put-in-.patch queue-6.0/hsi-omap_ssi_core-fix-error-handling-in-ssi_init.patch queue-6.0/tpm-tpm_ftpm_tee-fix-error-handling-in-ftpm_mod_init.patch queue-6.0/rdma-nldev-add-checks-for-nla_nest_start-in-fill_sta.patch queue-6.0/perf-arm_dsu-fix-hotplug-callback-leak-in-dsu_pmu_in.patch queue-6.0/serial-8250_bcm7271-fix-error-handling-in-brcmuart_i.patch queue-6.0/scsi-hpsa-fix-possible-memory-leak-in-hpsa_init_one.patch