iio: adc: men_z188_adc: Fix a resource leak in an error handling path
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Sat, 29 Jan 2022 08:32:47 +0000 (09:32 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 30 Jan 2022 13:51:24 +0000 (13:51 +0000)
If iio_device_register() fails, a previous ioremap() is left unbalanced.

Update the error handling path and add the missing iounmap() call, as
already done in the remove function.

Fixes: 74aeac4da66f ("iio: adc: Add MEN 16z188 ADC driver")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/320fc777863880247c2aff4a9d1a54ba69abf080.1643445149.git.christophe.jaillet@wanadoo.fr
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/adc/men_z188_adc.c

index 42ea8bc..adc5cea 100644 (file)
@@ -103,6 +103,7 @@ static int men_z188_probe(struct mcb_device *dev,
        struct z188_adc *adc;
        struct iio_dev *indio_dev;
        struct resource *mem;
+       int ret;
 
        indio_dev = devm_iio_device_alloc(&dev->dev, sizeof(struct z188_adc));
        if (!indio_dev)
@@ -128,8 +129,14 @@ static int men_z188_probe(struct mcb_device *dev,
        adc->mem = mem;
        mcb_set_drvdata(dev, indio_dev);
 
-       return iio_device_register(indio_dev);
+       ret = iio_device_register(indio_dev);
+       if (ret)
+               goto err_unmap;
+
+       return 0;
 
+err_unmap:
+       iounmap(adc->base);
 err:
        mcb_release_mem(mem);
        return -ENXIO;