Message ID | 20210108123546.19601-1-colin.king@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [next] ASoC: soc-pcm: Fix uninitialised return value in variable ret | expand |
Agree, thanks. > >Currently when attempting to start the BE fails because the >FE is not started the error return variable ret is not initialized >and garbage is returned. Fix this by setting it to 0 so the >caller does not report the error "ASoC: failed to shutdown some BEs" >and because this failure path has already reported the reason for >the early return. > >Addresses-Coverity: ("Uninitialized scalar variable") >Fixes: 2c1382840c19 ("ASoC: soc-pcm: disconnect BEs if the FE is not ready") >Signed-off-by: Colin Ian King <colin.king@canonical.com> >--- > sound/soc/soc-pcm.c | 1 + > 1 file changed, 1 insertion(+) > >diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c >index 481a4a25acb0..b787ce4ceb5a 100644 >--- a/sound/soc/soc-pcm.c >+++ b/sound/soc/soc-pcm.c >@@ -2443,6 +2443,7 @@ static int dpcm_run_update_startup(struct snd_soc_pcm_runtime *fe, int stream) > fe->dpcm[stream].state == SND_SOC_DPCM_STATE_CLOSE) { > dev_err(fe->dev, "ASoC: FE %s is not ready %d\n", > fe->dai_link->name, fe->dpcm[stream].state); >+ ret = 0; > goto disconnect; > } > >-- >2.29.2 >
On Fri, Jan 08, 2021 at 12:35:46PM +0000, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > Currently when attempting to start the BE fails because the > FE is not started the error return variable ret is not initialized > and garbage is returned. Fix this by setting it to 0 so the This doesn't apply against current code, please check and resend.
On 11/01/2021 16:35, Mark Brown wrote: > On Fri, Jan 08, 2021 at 12:35:46PM +0000, Colin King wrote: >> From: Colin Ian King <colin.king@canonical.com> >> >> Currently when attempting to start the BE fails because the >> FE is not started the error return variable ret is not initialized >> and garbage is returned. Fix this by setting it to 0 so the > > This doesn't apply against current code, please check and resend. > Just to double-check, which tree should I be working against? Colin
On Mon, Jan 11, 2021 at 05:07:46PM +0000, Colin Ian King wrote: > On 11/01/2021 16:35, Mark Brown wrote: > > This doesn't apply against current code, please check and resend. > Just to double-check, which tree should I be working against? The ASoC tree.
On 11/01/2021 16:35, Mark Brown wrote: > On Fri, Jan 08, 2021 at 12:35:46PM +0000, Colin King wrote: >> From: Colin Ian King <colin.king@canonical.com> >> >> Currently when attempting to start the BE fails because the >> FE is not started the error return variable ret is not initialized >> and garbage is returned. Fix this by setting it to 0 so the > > This doesn't apply against current code, please check and resend. > Current ASoC tree now has two commits: commit 4eeed5f40354735c4e68e71904db528ed19c9cbb Author: Souptick Joarder <jrdr.linux@gmail.com> Date: Sat Jan 9 09:15:01 2021 +0530 ASoC: soc-pcm: return correct -ERRNO in failure path commit e91b65b36fde0690f1c694f17dd1b549295464a7 Author: Dan Carpenter <dan.carpenter@oracle.com> Date: Mon Jan 11 12:50:21 2021 +0300 ASoC: soc-pcm: Fix an uninitialized error code ..both set ret to non-zero, which I believe will throw a subsequent warning messagethat's not strictly related. my fix was acked by zhucancan@vivo.com, so I'm now confused what is the *correct* fix. Colin
On Mon, Jan 11, 2021 at 05:37:36PM +0000, Colin Ian King wrote: > On 11/01/2021 16:35, Mark Brown wrote: > > This doesn't apply against current code, please check and resend. > ..both set ret to non-zero, which I believe will throw a subsequent > warning messagethat's not strictly related. > my fix was acked by zhucancan@vivo.com, so I'm now confused what is the > *correct* fix. Quite probably yours in which case it'll need rebasing - IIRC I looked at the various patches at fairly separate times and didn't connect them, my workflow is based on queueing things for automated processing later so I won't always remember seeing something similar.
On Mon, Jan 11, 2021 at 05:37:36PM +0000, Colin Ian King wrote: > On 11/01/2021 16:35, Mark Brown wrote: > > On Fri, Jan 08, 2021 at 12:35:46PM +0000, Colin King wrote: > >> From: Colin Ian King <colin.king@canonical.com> > >> > >> Currently when attempting to start the BE fails because the > >> FE is not started the error return variable ret is not initialized > >> and garbage is returned. Fix this by setting it to 0 so the > > > > This doesn't apply against current code, please check and resend. > > > > Current ASoC tree now has two commits: > > commit 4eeed5f40354735c4e68e71904db528ed19c9cbb > Author: Souptick Joarder <jrdr.linux@gmail.com> > Date: Sat Jan 9 09:15:01 2021 +0530 > > ASoC: soc-pcm: return correct -ERRNO in failure path > > commit e91b65b36fde0690f1c694f17dd1b549295464a7 > Author: Dan Carpenter <dan.carpenter@oracle.com> > Date: Mon Jan 11 12:50:21 2021 +0300 > > ASoC: soc-pcm: Fix an uninitialized error code > > ..both set ret to non-zero, which I believe will throw a subsequent > warning messagethat's not strictly related. My patch restored the original behavior. And I think that errors should return error codes. What you're saying is basically "Returning an error is a bug because it will trigger an error message in the caller". So then we have to have a debate about printks as a layering violation. I don't like error messages generally, because I think they make the code messy. A lot of people put error messages for impossible things. Or if a kmalloc() fails or whatever. There are too many error messages which people add in an auto-pilot way without considering whether it's necessary. But some people think, and maybe they're correct, that it's best if every function in the call tree prints a message. That way you can trace the error path easily. regards, dan carpenter
On 12/01/2021 10:22, Dan Carpenter wrote: > On Mon, Jan 11, 2021 at 05:37:36PM +0000, Colin Ian King wrote: >> On 11/01/2021 16:35, Mark Brown wrote: >>> On Fri, Jan 08, 2021 at 12:35:46PM +0000, Colin King wrote: >>>> From: Colin Ian King <colin.king@canonical.com> >>>> >>>> Currently when attempting to start the BE fails because the >>>> FE is not started the error return variable ret is not initialized >>>> and garbage is returned. Fix this by setting it to 0 so the >>> >>> This doesn't apply against current code, please check and resend. >>> >> >> Current ASoC tree now has two commits: >> >> commit 4eeed5f40354735c4e68e71904db528ed19c9cbb >> Author: Souptick Joarder <jrdr.linux@gmail.com> >> Date: Sat Jan 9 09:15:01 2021 +0530 >> >> ASoC: soc-pcm: return correct -ERRNO in failure path >> >> commit e91b65b36fde0690f1c694f17dd1b549295464a7 >> Author: Dan Carpenter <dan.carpenter@oracle.com> >> Date: Mon Jan 11 12:50:21 2021 +0300 >> >> ASoC: soc-pcm: Fix an uninitialized error code >> >> ..both set ret to non-zero, which I believe will throw a subsequent >> warning messagethat's not strictly related. > > My patch restored the original behavior. And I think that errors should > return error codes. What you're saying is basically "Returning an error > is a bug because it will trigger an error message in the caller". So > then we have to have a debate about printks as a layering violation. > > I don't like error messages generally, because I think they make the > code messy. A lot of people put error messages for impossible things. > Or if a kmalloc() fails or whatever. There are too many error messages > which people add in an auto-pilot way without considering whether it's > necessary. > > But some people think, and maybe they're correct, that it's best if > every function in the call tree prints a message. That way you can > trace the error path easily. +1 Yep, good point, ignore my fix. Thanks Dan for your observations. > > regards, > dan carpenter >
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 481a4a25acb0..b787ce4ceb5a 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c @@ -2443,6 +2443,7 @@ static int dpcm_run_update_startup(struct snd_soc_pcm_runtime *fe, int stream) fe->dpcm[stream].state == SND_SOC_DPCM_STATE_CLOSE) { dev_err(fe->dev, "ASoC: FE %s is not ready %d\n", fe->dai_link->name, fe->dpcm[stream].state); + ret = 0; goto disconnect; }