All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Matti Vaittinen <matti.vaittinen@linux.dev>
Cc: "Matti Vaittinen" <mazziesaccount@gmail.com>,
	"Matti Vaittinen" <matti.vaittinen@fi.rohmeurope.com>,
	"David Lechner" <dlechner@baylibre.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Andy Shevchenko" <andy@kernel.org>,
	"Javier Carrasco" <javier.carrasco.cruz@gmail.com>,
	"Mehdi Djait" <mehdi.djait.k@gmail.com>,
	linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Kalle Niemi" <kaleposti@gmail.com>,
	"Topi Sonkajärvi" <sonkajarvi@hotmail.com>
Subject: Re: [PATCH 11/12] iio: accel: kionix-kx022a: Prevent memory leak and fix state
Date: Mon, 17 Aug 2026 02:45:13 +0100	[thread overview]
Message-ID: <20260817024513.0c2adab7@jic23-huawei> (raw)
In-Reply-To: <85e6bd3998863e0247c52dcf0c1486b2cddff567.1786347811.git.mazziesaccount@gmail.com>

On Mon, 10 Aug 2026 10:55:03 +0300
Matti Vaittinen <matti.vaittinen@linux.dev> wrote:

> From: Matti Vaittinen <mazziesaccount@gmail.com>
> 
> The driver allocates memory for samples at buffer enable path. If regmap
> operation fails in the kx022a_fifo_enable() at the buffer enable path, the
> allocated memory is never freed. Furthermore, the state information and
> previous hardware configuration(s) aren't undone, potentially leaving
> WMI interrupts and buffers enabled, or driver state flags wrong.
> 
> Free the memory and revert the hardware configuration and state flags on
> error path.
> 
> Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com>
> Fixes: e7123a4dfcd7 ("iio: accel: kionix-kx022a: Refactor driver and add chip_info structure")
> ---
>  drivers/iio/accel/kionix-kx022a.c | 27 ++++++++++++++++++++++-----
>  1 file changed, 22 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/iio/accel/kionix-kx022a.c b/drivers/iio/accel/kionix-kx022a.c
> index 8a13f78aeab0..49e8b4b943da 100644
> --- a/drivers/iio/accel/kionix-kx022a.c
> +++ b/drivers/iio/accel/kionix-kx022a.c
> @@ -980,26 +980,43 @@ static int kx022a_fifo_enable(struct kx022a_data *data)
>  	guard(mutex)(&data->mutex);
>  	ret = __kx022a_turn_on_off(data, false);
>  	if (ret)
> -		return ret;
> +		goto err_free_out;

If we follow this path we are assuming that turn_on_off hasn't
had any side effects in failing...


>  
>  	/* Update watermark to HW */
>  	ret = kx022a_fifo_set_wmi(data);
>  	if (ret)
> -		return ret;
> +		goto err_free_out;
>  
>  	/* Enable buffer */
>  	ret = regmap_set_bits(data->regmap, data->chip_info->buf_cntl2,
>  			      KX022A_MASK_BUF_EN);
>  	if (ret)
> -		return ret;
> +		goto err_free_out;
>  
>  	data->state |= KX022A_STATE_FIFO;
>  	ret = regmap_set_bits(data->regmap, data->ien_reg,
>  			      KX022A_MASK_WMI);
>  	if (ret)
> -		return ret;
> +		goto err_wmi_out;
>  
> -	return __kx022a_turn_on_off(data, true);
> +	ret = __kx022a_turn_on_off(data, true);
> +	if (ret)
> +		goto err_on_out;


> +
> +	return ret;
> +
> +err_on_out:
> +	regmap_clear_bits(data->regmap, data->ien_reg,
> +			  KX022A_MASK_WMI);
> +err_wmi_out:
> +	regmap_clear_bits(data->regmap, data->chip_info->buf_cntl2,
> +			  KX022A_MASK_BUF_EN);
> +err_free_out:
> +	kfree(data->fifo_buffer);

This thing is fine here.

> +	data->state &= ~KX022A_STATE_FIFO;

This should also only occur when we have set it in the first place - 
so under err_wmi_out:


> +	__kx022a_turn_on_off(data, true);

So following path above we should not be calling this.  It might
be safe to do so but it isn't logically correct.  It should be a few
lines earlier.

> +
> +	return ret;
>  }
>  
>  static int kx022a_buffer_postenable(struct iio_dev *idev)


  parent reply	other threads:[~2026-08-17  1:45 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-10  7:49 [PATCH 00/12] ROHM IIO fixes Matti Vaittinen
2026-08-10  7:49 ` [PATCH 01/12] iio: adc: rohm-bd79124: Fix rising alarm Matti Vaittinen
2026-08-17  1:17   ` Jonathan Cameron
2026-08-10  7:50 ` [PATCH 02/12] iio: adc: rohm-bd79124: Fix channel initialization Matti Vaittinen
2026-08-17  1:23   ` Jonathan Cameron
2026-08-10  7:50 ` [PATCH 03/12] iio: adc: rohm-bd79124: Fix GPIO mask check Matti Vaittinen
2026-08-17  1:23   ` Jonathan Cameron
2026-08-10  7:51 ` [PATCH 04/12] iio: adc: rohm-bd79124: Catch regmap errors at measurement start/stop Matti Vaittinen
2026-08-17  1:27   ` Jonathan Cameron
2026-08-10  7:51 ` [PATCH 05/12] iio: dac: rohm-bd79703: Do not allow writing SCALE Matti Vaittinen
2026-08-17  1:32   ` Jonathan Cameron
2026-08-17  5:06     ` Matti Vaittinen
2026-08-10  7:52 ` [PATCH 06/12] iio: pressure: rohm-bm1390: Return error when read fails Matti Vaittinen
2026-08-17  1:34   ` Jonathan Cameron
2026-08-10  7:53 ` [PATCH 07/12] iio: pressure: rohm-bm1390: Fix AVE_NUM initialization Matti Vaittinen
2026-08-10 20:06   ` Andy Shevchenko
2026-08-11  9:05     ` Matti Vaittinen
2026-08-11 10:08       ` Andy Shevchenko
2026-08-17  1:19         ` Jonathan Cameron
2026-08-17  5:43           ` Matti Vaittinen
2026-08-17  1:12   ` Jonathan Cameron
2026-08-17  5:51     ` Matti Vaittinen
2026-08-10  7:53 ` [PATCH 08/12] iio: light: rohm-bu27034: Fix error return Matti Vaittinen
2026-08-17  1:35   ` Jonathan Cameron
2026-08-10  7:54 ` [PATCH 09/12] iio: light: rohm-bu27034: Fix infinite delay on error Matti Vaittinen
2026-08-10 20:09   ` Andy Shevchenko
2026-08-11  9:07     ` Matti Vaittinen
2026-08-10  7:54 ` [PATCH 10/12] iio: accel: kionix-kx022a: Fix array boundary check Matti Vaittinen
2026-08-12 11:43   ` Mehdi Djait
2026-08-17  1:37     ` Jonathan Cameron
2026-08-10  7:55 ` [PATCH 11/12] iio: accel: kionix-kx022a: Prevent memory leak and fix state Matti Vaittinen
2026-08-12 11:47   ` [PATCH 11/12] iio: accel: kionix-kx022a: Prevent memory leak and fix statey Mehdi Djait
2026-08-14  7:39     ` Matti Vaittinen
2026-08-17  1:49       ` Jonathan Cameron
2026-08-17  1:45   ` Jonathan Cameron [this message]
2026-08-17 11:37     ` [PATCH 11/12] iio: accel: kionix-kx022a: Prevent memory leak and fix state Matti Vaittinen
2026-08-10  7:55 ` [PATCH 12/12] iio: accel: kionix-kx022a: Fix IPOL macro name Matti Vaittinen
2026-08-12 11:53   ` Mehdi Djait
2026-08-14  7:43     ` Matti Vaittinen
2026-08-17  1:54   ` Jonathan Cameron
2026-08-17 11:43     ` Matti Vaittinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260817024513.0c2adab7@jic23-huawei \
    --to=jic23@kernel.org \
    --cc=andy@kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=javier.carrasco.cruz@gmail.com \
    --cc=kaleposti@gmail.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=matti.vaittinen@fi.rohmeurope.com \
    --cc=matti.vaittinen@linux.dev \
    --cc=mazziesaccount@gmail.com \
    --cc=mehdi.djait.k@gmail.com \
    --cc=nuno.sa@analog.com \
    --cc=sonkajarvi@hotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.