mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
floppy: unregister platform device on add_disk failure
The change referenced by the Fixes tag reverted a previous fix because that fix added incorrect cleanup for the platform_device_register() failure path. However, reverting the whole change also removed the cleanup for a later failure path. If platform_device_register() succeeds but device_add_disk() fails, the current floppy platform device has already been registered and registered[drive] has been set. The common out_remove_drives path uses while (drive--), so it starts from the previous drive and does not unregister the current one. As a result, the platform device registered for the failing drive is leaked. Unregister the current platform device directly on the device_add_disk() failure path, where platform_device_register() is known to have succeeded. Leave the platform_device_register() failure path unchanged. Fixes:895a9b3791("Revert "floppy: fix reference leak on platform_device_register() failure"") Fixes:47d34aa2d2("floppy: add error handling support for add_disk()") Signed-off-by: Guangshuo Li <lgs201920130244@gmail.com> Link: https://patch.msgid.link/20260708105703.747262-1-lgs201920130244@gmail.com Signed-off-by: Denis Efremov (Oracle) <efremov@linux.com>
This commit is contained in:
parent
7c82781039
commit
f1e72d80ad
|
|
@ -4732,8 +4732,11 @@ static int __init do_floppy_init(void)
|
|||
|
||||
err = device_add_disk(&floppy_device[drive].dev,
|
||||
disks[drive][0], NULL);
|
||||
if (err)
|
||||
if (err) {
|
||||
platform_device_unregister(&floppy_device[drive]);
|
||||
registered[drive] = false;
|
||||
goto out_remove_drives;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user