staging: iio: adis16060_core: Fix error handling
authorCristina Moraru <cristina.moraru09@gmail.com>
Sun, 25 Oct 2015 21:31:41 +0000 (23:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 Oct 2015 05:49:09 +0000 (14:49 +0900)
We need to check adis16060_spi_read return code to avoid feeding user
space with bogus data.
While, at it introduce out_unlock label in order to simplify locking
on error path.

Signed-off-by: Cristina Moraru <cristina.moraru09@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/iio/gyro/adis16060_core.c

index 80783e703f0daa1f2756dcceff2ceea06f0a2198..981b63f83a7b2d8ee940b5103fb440aeb7f67772 100644 (file)
@@ -89,11 +89,13 @@ static int adis16060_read_raw(struct iio_dev *indio_dev,
                /* Take the iio_dev status lock */
                mutex_lock(&indio_dev->mlock);
                ret = adis16060_spi_write(indio_dev, chan->address);
-               if (ret < 0) {
-                       mutex_unlock(&indio_dev->mlock);
-                       return ret;
-               }
+               if (ret < 0)
+                       goto out_unlock;
+
                ret = adis16060_spi_read(indio_dev, &tval);
+               if (ret < 0)
+                       goto out_unlock;
+
                mutex_unlock(&indio_dev->mlock);
                *val = tval;
                return IIO_VAL_INT;
@@ -108,6 +110,10 @@ static int adis16060_read_raw(struct iio_dev *indio_dev,
        }
 
        return -EINVAL;
+
+out_unlock:
+       mutex_unlock(&indio_dev->mlock);
+       return ret;
 }
 
 static const struct iio_info adis16060_info = {