In the Linux kernel, the following vulnerability has been resolved: USB: gadget: Fix the memory leak in rawgadget driver Currently, increasing rawdev->count happens before invoke the rawqueueevent(), if the rawqueueevent() return error, invoke rawrelease() will not trigger the devfree() to be called. [ 268.905865][ T5067] raw-gadget.0 gadget.0: failed to queue event [ 268.912053][ T5067] udc dummyudc.0: failed to start USB Raw Gadget: -12 [ 268.918885][ T5067] raw-gadget.0: probe of gadget.0 failed with error -12 [ 268.925956][ T5067] UDC core: USB Raw Gadget: couldn't find an available UDC or it's busy [ 268.934657][ T5067] misc raw-gadget: fail, usbgadgetregisterdriver returned -16 BUG: memory leak [<ffffffff8154bf94>] kmalloctrace+0x24/0x90 mm/slabcommon.c:1076 [<ffffffff8347eb55>] kmalloc include/linux/slab.h:582 [inline] [<ffffffff8347eb55>] kzalloc include/linux/slab.h:703 [inline] [<ffffffff8347eb55>] devnew drivers/usb/gadget/legacy/rawgadget.c:191 [inline] [<ffffffff8347eb55>] rawopen+0x45/0x110 drivers/usb/gadget/legacy/rawgadget.c:385 [<ffffffff827d1d09>] miscopen+0x1a9/0x1f0 drivers/char/misc.c:165 [<ffffffff8154bf94>] kmalloctrace+0x24/0x90 mm/slabcommon.c:1076 [<ffffffff8347cd2f>] kmalloc include/linux/slab.h:582 [inline] [<ffffffff8347cd2f>] rawioctlinit+0xdf/0x410 drivers/usb/gadget/legacy/rawgadget.c:460 [<ffffffff8347dfe9>] rawioctl+0x5f9/0x1120 drivers/usb/gadget/legacy/rawgadget.c:1250 [<ffffffff81685173>] vfsioctl fs/ioctl.c:51 [inline] [<ffffffff8154bf94>] kmalloctrace+0x24/0x90 mm/slabcommon.c:1076 [<ffffffff833ecc6a>] kmalloc include/linux/slab.h:582 [inline] [<ffffffff833ecc6a>] kzalloc include/linux/slab.h:703 [inline] [<ffffffff833ecc6a>] dummyallocrequest+0x5a/0xe0 drivers/usb/gadget/udc/dummyhcd.c:665 [<ffffffff833e9132>] usbepallocrequest+0x22/0xd0 drivers/usb/gadget/udc/core.c:196 [<ffffffff8347f13d>] gadgetbind+0x6d/0x370 drivers/usb/gadget/legacy/rawgadget.c:292 This commit therefore invoke krefget() under the condition that rawqueueevent() return success.