]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
char: misc: deallocate static minor in error path
authorThadeu Lima de Souza Cascardo <cascardo@igalia.com>
Thu, 23 Jan 2025 12:32:49 +0000 (09:32 -0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 20 Feb 2025 14:21:34 +0000 (15:21 +0100)
When creating sysfs files fail, the allocated minor must be freed such that
it can be later reused. That is specially harmful for static minor numbers,
since those would always fail to register later on.

Fixes: 6d04d2b554b1 ("misc: misc_minor_alloc to use ida for all dynamic/misc dynamic minors")
Cc: stable <stable@kernel.org>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Link: https://lore.kernel.org/r/20250123123249.4081674-5-cascardo@igalia.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/char/misc.c

index 2cf595d2e10b85fef701f44275ca0987600a1b3c..f7dd455dd0dd3c7c9956e772b5ab8bd83a67a4a6 100644 (file)
@@ -264,8 +264,8 @@ int misc_register(struct miscdevice *misc)
                device_create_with_groups(&misc_class, misc->parent, dev,
                                          misc, misc->groups, "%s", misc->name);
        if (IS_ERR(misc->this_device)) {
+               misc_minor_free(misc->minor);
                if (is_dynamic) {
-                       misc_minor_free(misc->minor);
                        misc->minor = MISC_DYNAMIC_MINOR;
                }
                err = PTR_ERR(misc->this_device);