boardd: fix context leak in init_usb_ctx (#22472)

old-commit-hash: 43d94787401d91f58f8a84ae8e70c739f10172a4
This commit is contained in:
Willem Melching
2021-10-07 13:24:38 +02:00
committed by GitHub
parent a8a493afc6
commit 6762c152de
+8 -6
View File
@@ -11,17 +11,19 @@
#include "selfdrive/common/swaglog.h"
#include "selfdrive/common/util.h"
static int init_usb_ctx(libusb_context *context) {
int err = libusb_init(&context);
static int init_usb_ctx(libusb_context **context) {
assert(context != nullptr);
int err = libusb_init(context);
if (err != 0) {
LOGE("libusb initialization error");
return err;
}
#if LIBUSB_API_VERSION >= 0x01000106
libusb_set_option(context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO);
libusb_set_option(*context, LIBUSB_OPTION_LOG_LEVEL, LIBUSB_LOG_LEVEL_INFO);
#else
libusb_set_debug(context, 3);
libusb_set_debug(*context, 3);
#endif
return err;
@@ -32,7 +34,7 @@ Panda::Panda(std::string serial) {
// init libusb
ssize_t num_devices;
libusb_device **dev_list = NULL;
int err = init_usb_ctx(ctx);
int err = init_usb_ctx(&ctx);
if (err != 0) { goto fail; }
// connect by serial
@@ -113,7 +115,7 @@ std::vector<std::string> Panda::list() {
libusb_device **dev_list = NULL;
std::vector<std::string> serials;
int err = init_usb_ctx(context);
int err = init_usb_ctx(&context);
if (err != 0) { return serials; }
num_devices = libusb_get_device_list(context, &dev_list);