alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [bug report] ASoC: SOF: ipc4-control: Add support for bytes control get and put
@ 2023-03-21  7:21 Dan Carpenter
  2023-03-21 13:36 ` Péter Ujfalusi
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2023-03-21  7:21 UTC (permalink / raw)
  To: peter.ujfalusi; +Cc: alsa-devel

Hello Peter Ujfalusi,

The patch a062c8899fed: "ASoC: SOF: ipc4-control: Add support for
bytes control get and put" from Mar 13, 2023, leads to the following
Smatch static checker warning:

	sound/soc/sof/ipc4-control.c:436 sof_ipc4_widget_kcontrol_setup()
	warn: iterator used outside loop: 'scontrol'

sound/soc/sof/ipc4-control.c
    411 static int sof_ipc4_widget_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
    412 {
    413         struct snd_sof_control *scontrol;
    414         int ret = 0;
    415 
    416         list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
    417                 if (scontrol->comp_id == swidget->comp_id) {
    418                         switch (scontrol->info_type) {
    419                         case SND_SOC_TPLG_CTL_VOLSW:
    420                         case SND_SOC_TPLG_CTL_VOLSW_SX:
    421                         case SND_SOC_TPLG_CTL_VOLSW_XR_SX:
    422                                 ret = sof_ipc4_set_volume_data(sdev, swidget,
    423                                                                scontrol, false);
    424                                 break;
    425                         case SND_SOC_TPLG_CTL_BYTES:
    426                                 ret = sof_ipc4_set_get_bytes_data(sdev, scontrol,
    427                                                                   true, false);
    428                                 break;

This breaks out of the switch statement and not the loop.  So that means
that it will continue through the loop and ret is reset.

    429                         default:
    430                                 break;
    431                         }
    432                 }
    433         }
    434 
    435         if (ret < 0)
--> 436                 dev_err(sdev->dev, "kcontrol %d set up failed for widget %s\n",
    437                         scontrol->comp_id, swidget->widget->name);
                                ^^^^^^^^^^^^^^^^^
"scontrol" cannot be a valid pointer at this stage.  It is always an
offset off the &sdev->kcontrol_list because of the above issue.

    438 
    439         return ret;
    440 }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [bug report] ASoC: SOF: ipc4-control: Add support for bytes control get and put
  2023-03-21  7:21 [bug report] ASoC: SOF: ipc4-control: Add support for bytes control get and put Dan Carpenter
@ 2023-03-21 13:36 ` Péter Ujfalusi
  0 siblings, 0 replies; 2+ messages in thread
From: Péter Ujfalusi @ 2023-03-21 13:36 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: alsa-devel

Hi Dan,

On 21/03/2023 09:21, Dan Carpenter wrote:
> Hello Peter Ujfalusi,
> 
> The patch a062c8899fed: "ASoC: SOF: ipc4-control: Add support for
> bytes control get and put" from Mar 13, 2023, leads to the following
> Smatch static checker warning:
> 
> 	sound/soc/sof/ipc4-control.c:436 sof_ipc4_widget_kcontrol_setup()
> 	warn: iterator used outside loop: 'scontrol'
> 
> sound/soc/sof/ipc4-control.c
>     411 static int sof_ipc4_widget_kcontrol_setup(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget)
>     412 {
>     413         struct snd_sof_control *scontrol;
>     414         int ret = 0;
>     415 
>     416         list_for_each_entry(scontrol, &sdev->kcontrol_list, list) {
>     417                 if (scontrol->comp_id == swidget->comp_id) {
>     418                         switch (scontrol->info_type) {
>     419                         case SND_SOC_TPLG_CTL_VOLSW:
>     420                         case SND_SOC_TPLG_CTL_VOLSW_SX:
>     421                         case SND_SOC_TPLG_CTL_VOLSW_XR_SX:
>     422                                 ret = sof_ipc4_set_volume_data(sdev, swidget,
>     423                                                                scontrol, false);
>     424                                 break;
>     425                         case SND_SOC_TPLG_CTL_BYTES:
>     426                                 ret = sof_ipc4_set_get_bytes_data(sdev, scontrol,
>     427                                                                   true, false);
>     428                                 break;
> 
> This breaks out of the switch statement and not the loop.  So that means
> that it will continue through the loop and ret is reset.
> 
>     429                         default:
>     430                                 break;
>     431                         }
>     432                 }
>     433         }
>     434 
>     435         if (ret < 0)
> --> 436                 dev_err(sdev->dev, "kcontrol %d set up failed for widget %s\n",
>     437                         scontrol->comp_id, swidget->widget->name);
>                                 ^^^^^^^^^^^^^^^^^
> "scontrol" cannot be a valid pointer at this stage.  It is always an
> offset off the &sdev->kcontrol_list because of the above issue.

This is valid in a semantics sense and I will fix it.
In real life we have single control per swidget and this should have
been one step up.

> 
>     438 
>     439         return ret;
>     440 }
> 
> regards,
> dan carpenter

-- 
Péter

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-03-21 13:37 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-21  7:21 [bug report] ASoC: SOF: ipc4-control: Add support for bytes control get and put Dan Carpenter
2023-03-21 13:36 ` Péter Ujfalusi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).