[lvc-project] [PATCH] ASoC: simple-card-utils: Fix error handling in simple_util_init_jack()

Igor Artemiev posted 1 patch 1 year, 6 months ago
sound/soc/generic/simple-card-utils.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
[lvc-project] [PATCH] ASoC: simple-card-utils: Fix error handling in simple_util_init_jack()
Posted by Igor Artemiev 1 year, 6 months ago
Currently, if snd_soc_card_jack_new_pins() or snd_soc_jack_add_gpios()
fails, the function continues execution without handling the error.
This can lead to unexpected behavior and potential crashes.

This patch fixes the problem by checking the return value 
of these functions.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
---
 sound/soc/generic/simple-card-utils.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
index 81077d16d22f..5da0c13858ad 100644
--- a/sound/soc/generic/simple-card-utils.c
+++ b/sound/soc/generic/simple-card-utils.c
@@ -784,10 +784,14 @@ int simple_util_init_jack(struct snd_soc_card *card,
 		sjack->gpio.desc	= desc;
 		sjack->gpio.debounce_time = 150;
 
-		snd_soc_card_jack_new_pins(card, pin_name, mask, &sjack->jack,
+		error = snd_soc_card_jack_new_pins(card, pin_name, mask, &sjack->jack,
 					   &sjack->pin, 1);
+		if (error)
+			return error;
 
-		snd_soc_jack_add_gpios(&sjack->jack, 1, &sjack->gpio);
+		error = snd_soc_jack_add_gpios(&sjack->jack, 1, &sjack->gpio);
+		if (error)
+			return error;
 	}
 
 	return 0;
-- 
2.39.2
Re: [lvc-project] [PATCH] ASoC: simple-card-utils: Fix error handling in simple_util_init_jack()
Posted by Mark Brown 1 year, 6 months ago
On Wed, Jun 19, 2024 at 05:24:32PM +0300, Igor Artemiev wrote:

> Currently, if snd_soc_card_jack_new_pins() or snd_soc_jack_add_gpios()
> fails, the function continues execution without handling the error.
> This can lead to unexpected behavior and potential crashes.

This just looks like some static checker thing, I'm just seeing a bald
assertation about issues and crashes with no analysis about what those
might be.  TBH I'd expect this to make things worse not better.
Re: [lvc-project] [PATCH] ASoC: simple-card-utils: Fix error handling in simple_util_init_jack()
Posted by Herve Codina 1 year, 6 months ago
Hi Igor,

On Wed, 19 Jun 2024 17:24:32 +0300
Igor Artemiev <Igor.A.Artemiev@mcst.ru> wrote:

> Currently, if snd_soc_card_jack_new_pins() or snd_soc_jack_add_gpios()
> fails, the function continues execution without handling the error.
> This can lead to unexpected behavior and potential crashes.
> 
> This patch fixes the problem by checking the return value 
> of these functions.
> 
> Found by Linux Verification Center (linuxtesting.org) with SVACE.
> 
> Signed-off-by: Igor Artemiev <Igor.A.Artemiev@mcst.ru>
> ---
>  sound/soc/generic/simple-card-utils.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/generic/simple-card-utils.c b/sound/soc/generic/simple-card-utils.c
> index 81077d16d22f..5da0c13858ad 100644
> --- a/sound/soc/generic/simple-card-utils.c
> +++ b/sound/soc/generic/simple-card-utils.c
> @@ -784,10 +784,14 @@ int simple_util_init_jack(struct snd_soc_card *card,
>  		sjack->gpio.desc	= desc;
>  		sjack->gpio.debounce_time = 150;
>  
> -		snd_soc_card_jack_new_pins(card, pin_name, mask, &sjack->jack,
> +		error = snd_soc_card_jack_new_pins(card, pin_name, mask, &sjack->jack,
>  					   &sjack->pin, 1);
> +		if (error)
> +			return error;
>  
> -		snd_soc_jack_add_gpios(&sjack->jack, 1, &sjack->gpio);
> +		error = snd_soc_jack_add_gpios(&sjack->jack, 1, &sjack->gpio);
> +		if (error)
> +			return error;
>  	}
>  
>  	return 0;

Looks correct for me.

Reviewed-by: Herve Codina <herve.codina@bootlin.com>

Best regards,
Hervé