From 8454a25ecfc27c5d96867a9fda012d0a73ffeddb Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Sat, 5 Nov 2016 00:11:30 +0100 Subject: [PATCH] aes3500: Fix possible crash if USB init fails The code was indented, but only the first call was actually in the conditional, which meant that initialisation carried on as normal on top of a failed USB device. Exit early and remove the conditional to fix this. --- libfprint/drivers/aes3500.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libfprint/drivers/aes3500.c b/libfprint/drivers/aes3500.c index 05c204a3..f229a1ac 100644 --- a/libfprint/drivers/aes3500.c +++ b/libfprint/drivers/aes3500.c @@ -130,23 +130,24 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data) struct aes3k_dev *aesdev; r = libusb_claim_interface(dev->udev, 0); - if (r < 0) + if (r < 0) { fp_err("could not claim interface 0: %s", libusb_error_name(r)); + return r; + } aesdev = dev->priv = g_malloc0(sizeof(struct aes3k_dev)); if (!aesdev) return -ENOMEM; - if (r == 0) - aesdev->data_buflen = DATA_BUFLEN; - aesdev->frame_width = FRAME_WIDTH; - aesdev->frame_size = FRAME_SIZE; - aesdev->frame_number = FRAME_NUMBER; - aesdev->enlarge_factor = ENLARGE_FACTOR; - aesdev->init_reqs = init_reqs; - aesdev->init_reqs_len = G_N_ELEMENTS(init_reqs); - fpi_imgdev_open_complete(dev, 0); + aesdev->data_buflen = DATA_BUFLEN; + aesdev->frame_width = FRAME_WIDTH; + aesdev->frame_size = FRAME_SIZE; + aesdev->frame_number = FRAME_NUMBER; + aesdev->enlarge_factor = ENLARGE_FACTOR; + aesdev->init_reqs = init_reqs; + aesdev->init_reqs_len = G_N_ELEMENTS(init_reqs); + fpi_imgdev_open_complete(dev, 0); return r; }