lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Sun, 18 Mar 2018 10:18:53 +0000
From:   Jonathan Cameron <jic23@...nel.org>
To:     SF Markus Elfring <elfring@...rs.sourceforge.net>
Cc:     linux-iio@...r.kernel.org, Hartmut Knaack <knaack.h@....de>,
        Lars-Peter Clausen <lars@...afoo.de>,
        Michael Hennerich <Michael.Hennerich@...log.com>,
        Peter Meerwald-Stadler <pmeerw@...erw.net>,
        LKML <linux-kernel@...r.kernel.org>,
        kernel-janitors@...r.kernel.org
Subject: Re: [PATCH] iio/adc/ad7291: Improve unlocking of a mutex in
 ad7291_read_raw()

On Tue, 13 Mar 2018 20:16:27 +0100
SF Markus Elfring <elfring@...rs.sourceforge.net> wrote:

> From: Markus Elfring <elfring@...rs.sourceforge.net>
> Date: Tue, 13 Mar 2018 20:08:40 +0100
> 
> * Add a jump target so that a call of the function "mutex_unlock" is stored
>   only once in this function implementation.
> 
> * Replace three calls by goto statements.
> 
> This issue was detected by using the Coccinelle software.
> 
> Signed-off-by: Markus Elfring <elfring@...rs.sourceforge.net>
> ---
>  drivers/iio/adc/ad7291.c | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7291.c b/drivers/iio/adc/ad7291.c
> index a862b5d8fb4b..b2c3d4c79909 100644
> --- a/drivers/iio/adc/ad7291.c
> +++ b/drivers/iio/adc/ad7291.c
> @@ -335,27 +335,27 @@ static int ad7291_read_raw(struct iio_dev *indio_dev,
>  			mutex_lock(&chip->state_lock);
>  			/* If in autocycle mode drop through */
>  			if (chip->command & AD7291_AUTOCYCLE) {
> -				mutex_unlock(&chip->state_lock);
> -				return -EBUSY;
> +				ret = -EBUSY;
> +				goto unlock;
>  			}
>  			/* Enable this channel alone */
>  			regval = chip->command & (~AD7291_VOLTAGE_MASK);
>  			regval |= BIT(15 - chan->channel);
>  			ret = ad7291_i2c_write(chip, AD7291_COMMAND, regval);
> -			if (ret < 0) {
> -				mutex_unlock(&chip->state_lock);
> -				return ret;
> -			}
> +			if (ret < 0)
> +				goto unlock;
> +
>  			/* Read voltage */
>  			ret = i2c_smbus_read_word_swapped(chip->client,
>  							  AD7291_VOLTAGE);
> -			if (ret < 0) {
> -				mutex_unlock(&chip->state_lock);
> -				return ret;
> -			}
> +			if (ret < 0)
> +				goto unlock;
> +
>  			*val = ret & AD7291_VALUE_MASK;
> +			ret = IIO_VAL_INT;
> +unlock:
>  			mutex_unlock(&chip->state_lock);
> -			return IIO_VAL_INT;
> +			return ret;
This localized error handling makes for complex code flow.  It does however
suggest that perhaps this block of code would be better in it's own function
with nice clean internal error handling.

>  		case IIO_TEMP:
>  			/* Assumes tsense bit of command register always set */
>  			ret = i2c_smbus_read_word_swapped(chip->client,

Markus, please throttle these patches to one at a time.  If you send lots
of similar patches before anyone has reviewed any of them it wastes both
your and reviewers time.

Thanks,

Jonathan

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ