diff mbox series

ASoC: SOF: Propagate sof_get_ctrl_copy_params() error properly

Message ID 20190507193910.23943-1-tiwai@suse.de (mailing list archive)
State Accepted
Commit 54d198d5019dd98b9bcb9099a389608d7e2cccad
Headers show
Series ASoC: SOF: Propagate sof_get_ctrl_copy_params() error properly | expand

Commit Message

Takashi Iwai May 7, 2019, 7:39 p.m. UTC
This fixes a compile warning below by properly handling the error code
from sof_get_ctrl_copy_params():
  include/linux/kernel.h:843:43: warning: 'sparams.pl_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
  sound/soc/sof/ipc.c:639:34: note: 'sparams.pl_size' was declared here

The function returns an error before setting sparams.pl_size, so it'd
assign an uninitialized value at a later point.

Fixes: 53e0c72d98ba ("ASoC: SOF: Add support for IPC IO between DSP and Host")
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/soc/sof/ipc.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

Comments

Pierre-Louis Bossart May 7, 2019, 7:54 p.m. UTC | #1
On 5/7/19 2:39 PM, Takashi Iwai wrote:
> This fixes a compile warning below by properly handling the error code
> from sof_get_ctrl_copy_params():
>    include/linux/kernel.h:843:43: warning: 'sparams.pl_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
>    sound/soc/sof/ipc.c:639:34: note: 'sparams.pl_size' was declared here
> 
> The function returns an error before setting sparams.pl_size, so it'd
> assign an uninitialized value at a later point.

Thanks Takashi.

I don't recall having seen this warning and this code has been around 
for a while. Does this show with a special config/compiler?

Adding Jaska since he wrote the support for large control data.

> 
> Fixes: 53e0c72d98ba ("ASoC: SOF: Add support for IPC IO between DSP and Host")
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>   sound/soc/sof/ipc.c | 10 +++++++---
>   1 file changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c
> index ba1bb17a8d1e..f0b9d3c53f6f 100644
> --- a/sound/soc/sof/ipc.c
> +++ b/sound/soc/sof/ipc.c
> @@ -567,7 +567,7 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
>   	size_t offset = 0;
>   	size_t msg_bytes;
>   	size_t pl_size;
> -	int err = 0;
> +	int err;
>   	int i;
>   
>   	/* allocate max ipc size because we have at least one */
> @@ -576,9 +576,13 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
>   		return -ENOMEM;
>   
>   	if (send)
> -		sof_get_ctrl_copy_params(cdata->type, cdata, partdata, sparams);
> +		err = sof_get_ctrl_copy_params(cdata->type, cdata, partdata,
> +					       sparams);
>   	else
> -		sof_get_ctrl_copy_params(cdata->type, partdata, cdata, sparams);
> +		err = sof_get_ctrl_copy_params(cdata->type, partdata, cdata,
> +					       sparams);
> +	if (err < 0)
> +		return err;
>   
>   	msg_bytes = sparams->msg_bytes;
>   	pl_size = sparams->pl_size;
>
Takashi Iwai May 7, 2019, 8:47 p.m. UTC | #2
On Tue, 07 May 2019 21:54:11 +0200,
Pierre-Louis Bossart wrote:
> 
> 
> 
> On 5/7/19 2:39 PM, Takashi Iwai wrote:
> > This fixes a compile warning below by properly handling the error code
> > from sof_get_ctrl_copy_params():
> >    include/linux/kernel.h:843:43: warning: 'sparams.pl_size' may be used uninitialized in this function [-Wmaybe-uninitialized]
> >    sound/soc/sof/ipc.c:639:34: note: 'sparams.pl_size' was declared here
> >
> > The function returns an error before setting sparams.pl_size, so it'd
> > assign an uninitialized value at a later point.
> 
> Thanks Takashi.
> 
> I don't recall having seen this warning and this code has been around
> for a while. Does this show with a special config/compiler?

I got this by a few cross-compilations (e.g. arm64), so it might be
specific to some configs, yes.


Takashi

> 
> Adding Jaska since he wrote the support for large control data.
> 
> >
> > Fixes: 53e0c72d98ba ("ASoC: SOF: Add support for IPC IO between DSP and Host")
> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> > ---
> >   sound/soc/sof/ipc.c | 10 +++++++---
> >   1 file changed, 7 insertions(+), 3 deletions(-)
> >
> > diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c
> > index ba1bb17a8d1e..f0b9d3c53f6f 100644
> > --- a/sound/soc/sof/ipc.c
> > +++ b/sound/soc/sof/ipc.c
> > @@ -567,7 +567,7 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
> >   	size_t offset = 0;
> >   	size_t msg_bytes;
> >   	size_t pl_size;
> > -	int err = 0;
> > +	int err;
> >   	int i;
> >     	/* allocate max ipc size because we have at least one */
> > @@ -576,9 +576,13 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
> >   		return -ENOMEM;
> >     	if (send)
> > -		sof_get_ctrl_copy_params(cdata->type, cdata, partdata, sparams);
> > +		err = sof_get_ctrl_copy_params(cdata->type, cdata, partdata,
> > +					       sparams);
> >   	else
> > -		sof_get_ctrl_copy_params(cdata->type, partdata, cdata, sparams);
> > +		err = sof_get_ctrl_copy_params(cdata->type, partdata, cdata,
> > +					       sparams);
> > +	if (err < 0)
> > +		return err;
> >     	msg_bytes = sparams->msg_bytes;
> >   	pl_size = sparams->pl_size;
> >
>
diff mbox series

Patch

diff --git a/sound/soc/sof/ipc.c b/sound/soc/sof/ipc.c
index ba1bb17a8d1e..f0b9d3c53f6f 100644
--- a/sound/soc/sof/ipc.c
+++ b/sound/soc/sof/ipc.c
@@ -567,7 +567,7 @@  static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
 	size_t offset = 0;
 	size_t msg_bytes;
 	size_t pl_size;
-	int err = 0;
+	int err;
 	int i;
 
 	/* allocate max ipc size because we have at least one */
@@ -576,9 +576,13 @@  static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
 		return -ENOMEM;
 
 	if (send)
-		sof_get_ctrl_copy_params(cdata->type, cdata, partdata, sparams);
+		err = sof_get_ctrl_copy_params(cdata->type, cdata, partdata,
+					       sparams);
 	else
-		sof_get_ctrl_copy_params(cdata->type, partdata, cdata, sparams);
+		err = sof_get_ctrl_copy_params(cdata->type, partdata, cdata,
+					       sparams);
+	if (err < 0)
+		return err;
 
 	msg_bytes = sparams->msg_bytes;
 	pl_size = sparams->pl_size;