[alsa-devel] [bug report] ASoC: SOF: topology: use set_get_data in process load

Dan Carpenter dan.carpenter at oracle.com
Mon Aug 19 13:45:35 CEST 2019


Hello Jaska Uimonen,

The patch cac974a51ebb: "ASoC: SOF: topology: use set_get_data in
process load" from Aug 9, 2019, leads to the following static checker
warning:

	sound/soc/sof/topology.c:1857 sof_process_load()
	warn: 'ipc_data_size' unsigned <= 0

sound/soc/sof/topology.c
  1825  static int sof_process_load(struct snd_soc_component *scomp, int index,
  1826                              struct snd_sof_widget *swidget,
  1827                              struct snd_soc_tplg_dapm_widget *tw,
  1828                              struct sof_ipc_comp_reply *r,
  1829                              int type)
  1830  {
  1831          struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(scomp);
  1832          struct snd_soc_dapm_widget *widget = swidget->widget;
  1833          struct snd_soc_tplg_private *private = &tw->priv;
  1834          struct sof_ipc_comp_process *process = NULL;
  1835          struct sof_widget_data *wdata = NULL;
  1836          size_t ipc_data_size = 0;
                ^^^^^^^^^^^^^^^^^^^^
Unsigned.

  1837          size_t ipc_size;
  1838          int offset = 0;
  1839          int ret = 0;
  1840          int i;
  1841  
  1842          if (type == SOF_COMP_NONE) {
  1843                  dev_err(sdev->dev, "error: invalid process comp type %d\n",
  1844                          type);
  1845                  return -EINVAL;
  1846          }
  1847  
  1848          /* allocate struct for widget control data sizes and types */
  1849          if (widget->num_kcontrols) {
  1850                  wdata = kcalloc(widget->num_kcontrols,
  1851                                  sizeof(*wdata),
  1852                                  GFP_KERNEL);
  1853  
  1854                  if (!wdata)
  1855                          return -ENOMEM;
  1856  
  1857                  /* get possible component controls and get size of all pdata */
  1858                  ipc_data_size = sof_get_control_data(sdev, widget, wdata);
  1859  
  1860                  if (ipc_data_size <= 0) {


The sof_get_control_data() returns negative error codes, but it's also
declared as unsigned.  But the main reason I'm reporting this instead of
fixing it myself (besides laziness) is that I was wondering if it was
really handling zero returns correctly.  Should we really return success
in that situation?

  1861                          ret = ipc_data_size;
  1862                          goto out;
  1863                  }
  1864          }
  1865  

regards,
dan carpenter


More information about the Alsa-devel mailing list