From 76269decdd405a0ae919a24c1ba3061c44bf80b2 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Sat, 5 Nov 2016 00:12:46 +0100 Subject: [PATCH] aes4000: 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. https://bugzilla.gnome.org/show_bug.cgi?id=98594 --- libfprint/drivers/aes4000.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/libfprint/drivers/aes4000.c b/libfprint/drivers/aes4000.c index f1a9d06..d4f90b7 100644 --- a/libfprint/drivers/aes4000.c +++ b/libfprint/drivers/aes4000.c @@ -127,23 +127,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; }