]> git.ipfire.org Git - thirdparty/kernel/stable.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, 13 Mar 2025 12:02:15 +0000 (13:02 +0100)
commit 6d991f569c5ef6eaeadf1238df2c36e3975233ad upstream.

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);