diff mbox series

iio: adc: mcp3422: fix locking on error path

Message ID 20200901093218.1500845-1-angelo.compagnucci@gmail.com (mailing list archive)
State New, archived
Headers show
Series iio: adc: mcp3422: fix locking on error path | expand

Commit Message

Angelo Compagnucci Sept. 1, 2020, 9:32 a.m. UTC
Reading from the chip should be unlocked on error path else the lock
could never being released.

Fixes: 07914c84ba30 ("iio: adc: Add driver for Microchip MCP3422/3/4 high resolution ADC")
Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
---
 drivers/iio/adc/mcp3422.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jonathan Cameron Sept. 1, 2020, 10:01 a.m. UTC | #1
On Tue, 1 Sep 2020 11:32:18 +0200
Angelo Compagnucci <angelo.compagnucci@gmail.com> wrote:

> Reading from the chip should be unlocked on error path else the lock
> could never being released.

We should also reference the fix that we are fixing so I've added
an additional fixes tag below and a reported by tag for Julia.

> 
> Fixes: 07914c84ba30 ("iio: adc: Add driver for Microchip MCP3422/3/4 high resolution ADC")
Fixes: 3f1093d83d71 ("iio: adc: mcp3422: fix locking scope")
> Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
Reported-by: Julia Lawall <julia.lawall@inria.fr>
Acked-by: Jonathan Cameron <jonathan.cameron@huawei.com>

Greg, this is the fix for the issue Julia reported.

Sorry for the hassle (and messing this up in the first palce), but
could you pick this one up directly into your staging-linus branch.

If you'd prefer a different resolution to the problem let us know.

Thanks,

Jonathan


> ---
>  drivers/iio/adc/mcp3422.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
> index 219adac2384b..da353dcb1e9d 100644
> --- a/drivers/iio/adc/mcp3422.c
> +++ b/drivers/iio/adc/mcp3422.c
> @@ -143,8 +143,10 @@ static int mcp3422_read_channel(struct mcp3422 *adc,
>  		config &= ~MCP3422_PGA_MASK;
>  		config |= MCP3422_PGA_VALUE(adc->pga[req_channel]);
>  		ret = mcp3422_update_config(adc, config);
> -		if (ret < 0)
> +		if (ret < 0) {
> +			mutex_unlock(&adc->lock);
>  			return ret;
> +		}
>  		msleep(mcp3422_read_times[MCP3422_SAMPLE_RATE(adc->config)]);
>  	}
>
Greg Kroah-Hartman Sept. 1, 2020, 2:08 p.m. UTC | #2
On Tue, Sep 01, 2020 at 11:01:25AM +0100, Jonathan Cameron wrote:
> On Tue, 1 Sep 2020 11:32:18 +0200
> Angelo Compagnucci <angelo.compagnucci@gmail.com> wrote:
> 
> > Reading from the chip should be unlocked on error path else the lock
> > could never being released.
> 
> We should also reference the fix that we are fixing so I've added
> an additional fixes tag below and a reported by tag for Julia.
> 
> > 
> > Fixes: 07914c84ba30 ("iio: adc: Add driver for Microchip MCP3422/3/4 high resolution ADC")
> Fixes: 3f1093d83d71 ("iio: adc: mcp3422: fix locking scope")
> > Signed-off-by: Angelo Compagnucci <angelo.compagnucci@gmail.com>
> Reported-by: Julia Lawall <julia.lawall@inria.fr>
> Acked-by: Jonathan Cameron <jonathan.cameron@huawei.com>
> 
> Greg, this is the fix for the issue Julia reported.
> 
> Sorry for the hassle (and messing this up in the first palce), but
> could you pick this one up directly into your staging-linus branch.

No worries, now queued up, thanks.

greg k-h
diff mbox series

Patch

diff --git a/drivers/iio/adc/mcp3422.c b/drivers/iio/adc/mcp3422.c
index 219adac2384b..da353dcb1e9d 100644
--- a/drivers/iio/adc/mcp3422.c
+++ b/drivers/iio/adc/mcp3422.c
@@ -143,8 +143,10 @@  static int mcp3422_read_channel(struct mcp3422 *adc,
 		config &= ~MCP3422_PGA_MASK;
 		config |= MCP3422_PGA_VALUE(adc->pga[req_channel]);
 		ret = mcp3422_update_config(adc, config);
-		if (ret < 0)
+		if (ret < 0) {
+			mutex_unlock(&adc->lock);
 			return ret;
+		}
 		msleep(mcp3422_read_times[MCP3422_SAMPLE_RATE(adc->config)]);
 	}