Release the interface when bailing out of open_device() after the
interface has been claimed.
if (ret < 0) {
debug(ctx, "libusb_get_configuration after claim failed: %s\n",
libusb_error_name(ret));
if (ret < 0) {
debug(ctx, "libusb_get_configuration after claim failed: %s\n",
libusb_error_name(ret));
+ goto out_libusb_release_interface;
}
if (current_configuration != (*dev)->desc->configuration) {
debug(ctx, "libusb configuration changed (expected: %hhu, current: %hhu\n",
(*dev)->desc->configuration, current_configuration);
ret = -EINVAL;
}
if (current_configuration != (*dev)->desc->configuration) {
debug(ctx, "libusb configuration changed (expected: %hhu, current: %hhu\n",
(*dev)->desc->configuration, current_configuration);
ret = -EINVAL;
+ goto out_libusb_release_interface;
+out_libusb_release_interface:
+ libusb_release_interface((*dev)->usb_device,
+ (*dev)->desc->interface_number);
out_libusb_close:
libusb_close((*dev)->usb_device);
(*dev)->usb_device = NULL;
out_libusb_close:
libusb_close((*dev)->usb_device);
(*dev)->usb_device = NULL;