diff mbox series

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

Message ID 20240619142432.573338-1-Igor.A.Artemiev@mcst.ru (mailing list archive)
State New
Headers show
Series [lvc-project] ASoC: simple-card-utils: Fix error handling in simple_util_init_jack() | expand

Commit Message

Igor Artemiev June 19, 2024, 2:24 p.m. UTC
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(-)

Comments

Herve Codina June 19, 2024, 2:56 p.m. UTC | #1
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é
Mark Brown June 19, 2024, 3:06 p.m. UTC | #2
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.
diff mbox series

Patch

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;