]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
usb: gadget: f_rndis: Protect RNDIS options with mutex
authorKuen-Han Tsai <khtsai@google.com>
Fri, 20 Mar 2026 08:54:45 +0000 (16:54 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 30 Mar 2026 15:19:29 +0000 (17:19 +0200)
The class/subclass/protocol options are suspectible to race conditions
as they can be accessed concurrently through configfs.

Use existing mutex to protect these options. This issue was identified
during code inspection.

Fixes: 73517cf49bd4 ("usb: gadget: add RNDIS configfs options for class/subclass/protocol")
Cc: stable@vger.kernel.org
Signed-off-by: Kuen-Han Tsai <khtsai@google.com>
Link: https://patch.msgid.link/20260320-usb-net-lifecycle-v1-2-4886b578161b@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/gadget/function/f_rndis.c

index 8b11d8d6d89cec663fdcada5ae29e69dc14fdb47..521b4619d6befb8374ced9ac5cdc4a0a6b1c5f27 100644 (file)
@@ -11,6 +11,7 @@
 
 /* #define VERBOSE_DEBUG */
 
+#include <linux/cleanup.h>
 #include <linux/slab.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
@@ -678,9 +679,11 @@ rndis_bind(struct usb_configuration *c, struct usb_function *f)
                        return -ENOMEM;
        }
 
-       rndis_iad_descriptor.bFunctionClass = rndis_opts->class;
-       rndis_iad_descriptor.bFunctionSubClass = rndis_opts->subclass;
-       rndis_iad_descriptor.bFunctionProtocol = rndis_opts->protocol;
+       scoped_guard(mutex, &rndis_opts->lock) {
+               rndis_iad_descriptor.bFunctionClass = rndis_opts->class;
+               rndis_iad_descriptor.bFunctionSubClass = rndis_opts->subclass;
+               rndis_iad_descriptor.bFunctionProtocol = rndis_opts->protocol;
+       }
 
        /*
         * in drivers/usb/gadget/configfs.c:configfs_composite_bind()