|
@@ -882,18 +882,24 @@ f_midi_bind(struct usb_configuration *c, struct usb_function *f)
|
|
|
* both speeds
|
|
|
*/
|
|
|
/* copy descriptors, and track endpoint copies */
|
|
|
+ f->descriptors = usb_copy_descriptors(midi_function);
|
|
|
+ if (!f->descriptors)
|
|
|
+ goto fail_f_midi;
|
|
|
if (gadget_is_dualspeed(c->cdev->gadget)) {
|
|
|
bulk_in_desc.wMaxPacketSize = cpu_to_le16(512);
|
|
|
bulk_out_desc.wMaxPacketSize = cpu_to_le16(512);
|
|
|
f->hs_descriptors = usb_copy_descriptors(midi_function);
|
|
|
- } else {
|
|
|
- f->descriptors = usb_copy_descriptors(midi_function);
|
|
|
+ if (!f->hs_descriptors)
|
|
|
+ goto fail_f_midi;
|
|
|
}
|
|
|
|
|
|
kfree(midi_function);
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
+fail_f_midi:
|
|
|
+ kfree(midi_function);
|
|
|
+ usb_free_descriptors(f->hs_descriptors);
|
|
|
fail:
|
|
|
/* we might as well release our claims on endpoints */
|
|
|
if (midi->out_ep)
|