All of lore.kernel.org
 help / color / mirror / Atom feed
* [asahilinux:bits/070-audio 17/37] sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.
@ 2023-08-25 15:59 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2023-08-25 15:59 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: "Martin Povišer" <povik+lin@cutebit.org>
CC: Hector Martin <marcan@marcan.st>

tree:   https://github.com/AsahiLinux/linux bits/070-audio
head:   fd19415d77a7612b4edbe780d58328ec41019816
commit: f664a1ed8e4e6cae5697db372d62cac0fafde939 [17/37] ASoC: dapm: Export new 'graph.dot' file in debugfs
:::::: branch date: 6 weeks ago
:::::: commit date: 6 weeks ago
config: i386-randconfig-141-20230825 (https://download.01.org/0day-ci/archive/20230825/202308252346.7wpnLutf-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230825/202308252346.7wpnLutf-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202308252346.7wpnLutf-lkp@intel.com/

smatch warnings:
sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.

vim +/num_wdone +2260 sound/soc/soc-dapm.c

ef49e4fae3f364 Mark Brown     2011-04-04  2195  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2196  static ssize_t dapm_graph_read_file(struct file *file, char __user *user_buf,
f664a1ed8e4e6c Martin Povišer 2022-08-21  2197  				    size_t count, loff_t *ppos)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2198  {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2199  	struct snd_soc_card *card = file->private_data;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2200  	struct snd_soc_dapm_context *dapm;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2201  	struct snd_soc_dapm_path *p;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2202  	struct snd_soc_dapm_widget *w;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2203  	struct snd_soc_pcm_runtime *rtd;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2204  	struct snd_soc_dapm_widget *wdone[16];
f664a1ed8e4e6c Martin Povišer 2022-08-21  2205  	struct snd_soc_dai *dai;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2206  	int i, num_wdone = 0, cluster = 0;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2207  	char *buf;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2208  	ssize_t bufsize;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2209  	ssize_t ret = 0;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2210  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2211  	bufsize = 1024 * card->num_dapm_widgets;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2212  	buf = kmalloc(bufsize, GFP_KERNEL);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2213  	if (!buf)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2214  		return -ENOMEM;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2215  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2216  	mutex_lock(&card->dapm_mutex);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2217  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2218  #define bufprintf(...) \
f664a1ed8e4e6c Martin Povišer 2022-08-21  2219  		ret += scnprintf(buf + ret, bufsize - ret, __VA_ARGS__)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2220  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2221  	bufprintf("digraph dapm {\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2222  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2223  	/*
f664a1ed8e4e6c Martin Povišer 2022-08-21  2224  	 * Print the user-visible devices of the card.
f664a1ed8e4e6c Martin Povišer 2022-08-21  2225  	 */
f664a1ed8e4e6c Martin Povišer 2022-08-21  2226  	bufprintf("subgraph cluster_%d {\n", cluster++);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2227  	bufprintf("label=\"Devices\";style=filled;fillcolor=gray;\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2228  	for_each_card_rtds(card, rtd) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2229  		if (rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2230  			continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2231  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2232  		bufprintf("w%pK [label=\"%d: %s\"];\n", rtd,
f664a1ed8e4e6c Martin Povišer 2022-08-21  2233  			  rtd->pcm->device, rtd->dai_link->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2234  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2235  	bufprintf("};\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2236  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2237  	/*
f664a1ed8e4e6c Martin Povišer 2022-08-21  2238  	 * Print the playback/capture widgets of DAIs just next to
f664a1ed8e4e6c Martin Povišer 2022-08-21  2239  	 * the user-visible devices. Keep the list of already printed
f664a1ed8e4e6c Martin Povišer 2022-08-21  2240  	 * widgets in 'wdone', so they will be skipped later.
f664a1ed8e4e6c Martin Povišer 2022-08-21  2241  	 */
f664a1ed8e4e6c Martin Povišer 2022-08-21  2242  	for_each_card_rtds(card, rtd) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2243  		for_each_rtd_cpu_dais(rtd, i, dai) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2244  			if (dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2245  				w = dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2246  				bufprintf("w%pK [label=\"%s\"];\n", w, w->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2247  				if (!rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2248  					bufprintf("w%pK -> w%pK;\n", rtd, w);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2249  				wdone[num_wdone] = w;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2250  				if (num_wdone < ARRAY_SIZE(wdone))
f664a1ed8e4e6c Martin Povišer 2022-08-21  2251  					num_wdone++;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2252  			}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2253  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2254  			if (dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2255  				w = dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2256  				bufprintf("w%pK [label=\"%s\"];\n", w, w->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2257  				if (!rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2258  					bufprintf("w%pK -> w%pK;\n", w, rtd);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2259  				wdone[num_wdone] = w;
f664a1ed8e4e6c Martin Povišer 2022-08-21 @2260  				if (num_wdone < ARRAY_SIZE(wdone))
f664a1ed8e4e6c Martin Povišer 2022-08-21  2261  					num_wdone++;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2262  			}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2263  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2264  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2265  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2266  	for_each_card_dapms(card, dapm) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2267  		const char *prefix = soc_dapm_prefix(dapm);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2268  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2269  		if (dapm != &card->dapm) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2270  			bufprintf("subgraph cluster_%d {\n", cluster++);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2271  			if (prefix)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2272  				bufprintf("label=\"%s\";\n", prefix);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2273  			else if (dapm->component)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2274  				bufprintf("label=\"%s\";\n",
f664a1ed8e4e6c Martin Povišer 2022-08-21  2275  					  dapm->component->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2276  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2277  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2278  		for_each_card_widgets(dapm->card, w) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2279  			const char *name = w->name;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2280  			bool skip = false;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2281  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2282  			if (w->dapm != dapm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2283  				continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2284  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2285  			if (list_empty(&w->edges[0]) && list_empty(&w->edges[1]))
f664a1ed8e4e6c Martin Povišer 2022-08-21  2286  				continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2287  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2288  			for (i = 0; i < num_wdone; i++)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2289  				if (wdone[i] == w)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2290  					skip = true;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2291  			if (skip)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2292  				continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2293  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2294  			if (prefix && strlen(name) > strlen(prefix) + 1)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2295  				name += strlen(prefix) + 1;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2296  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2297  			bufprintf("w%pK [label=\"%s\"];\n", w, name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2298  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2299  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2300  		if (dapm != &card->dapm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2301  			bufprintf("}\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2302  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2303  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2304  	list_for_each_entry(p, &card->paths, list) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2305  		if (p->name)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2306  			bufprintf("w%pK -> w%pK [label=\"%s\"];\n",
f664a1ed8e4e6c Martin Povišer 2022-08-21  2307  				  p->source, p->sink, p->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2308  		else
f664a1ed8e4e6c Martin Povišer 2022-08-21  2309  			bufprintf("w%pK -> w%pK;\n", p->source, p->sink);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2310  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2311  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2312  	bufprintf("}\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2313  #undef bufprintf
f664a1ed8e4e6c Martin Povišer 2022-08-21  2314  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2315  	mutex_unlock(&card->dapm_mutex);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2316  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2317  	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2318  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2319  	kfree(buf);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2320  	return ret;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2321  }
f664a1ed8e4e6c Martin Povišer 2022-08-21  2322  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

* [asahilinux:bits/070-audio 17/37] sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.
@ 2023-10-13 17:01 kernel test robot
  0 siblings, 0 replies; 3+ messages in thread
From: kernel test robot @ 2023-10-13 17:01 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: "Martin Povišer" <povik+lin@cutebit.org>
CC: Hector Martin <marcan@marcan.st>

tree:   https://github.com/AsahiLinux/linux bits/070-audio
head:   84126be72ac9e0b38c992e806417952deb3cd540
commit: f664a1ed8e4e6cae5697db372d62cac0fafde939 [17/37] ASoC: dapm: Export new 'graph.dot' file in debugfs
:::::: branch date: 3 weeks ago
:::::: commit date: 3 months ago
config: i386-randconfig-141-20230825 (https://download.01.org/0day-ci/archive/20231014/202310140049.EtXqBptb-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231014/202310140049.EtXqBptb-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202310140049.EtXqBptb-lkp@intel.com/

smatch warnings:
sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.

vim +/num_wdone +2260 sound/soc/soc-dapm.c

ef49e4fae3f364 Mark Brown     2011-04-04  2195  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2196  static ssize_t dapm_graph_read_file(struct file *file, char __user *user_buf,
f664a1ed8e4e6c Martin Povišer 2022-08-21  2197  				    size_t count, loff_t *ppos)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2198  {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2199  	struct snd_soc_card *card = file->private_data;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2200  	struct snd_soc_dapm_context *dapm;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2201  	struct snd_soc_dapm_path *p;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2202  	struct snd_soc_dapm_widget *w;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2203  	struct snd_soc_pcm_runtime *rtd;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2204  	struct snd_soc_dapm_widget *wdone[16];
f664a1ed8e4e6c Martin Povišer 2022-08-21  2205  	struct snd_soc_dai *dai;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2206  	int i, num_wdone = 0, cluster = 0;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2207  	char *buf;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2208  	ssize_t bufsize;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2209  	ssize_t ret = 0;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2210  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2211  	bufsize = 1024 * card->num_dapm_widgets;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2212  	buf = kmalloc(bufsize, GFP_KERNEL);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2213  	if (!buf)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2214  		return -ENOMEM;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2215  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2216  	mutex_lock(&card->dapm_mutex);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2217  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2218  #define bufprintf(...) \
f664a1ed8e4e6c Martin Povišer 2022-08-21  2219  		ret += scnprintf(buf + ret, bufsize - ret, __VA_ARGS__)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2220  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2221  	bufprintf("digraph dapm {\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2222  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2223  	/*
f664a1ed8e4e6c Martin Povišer 2022-08-21  2224  	 * Print the user-visible devices of the card.
f664a1ed8e4e6c Martin Povišer 2022-08-21  2225  	 */
f664a1ed8e4e6c Martin Povišer 2022-08-21  2226  	bufprintf("subgraph cluster_%d {\n", cluster++);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2227  	bufprintf("label=\"Devices\";style=filled;fillcolor=gray;\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2228  	for_each_card_rtds(card, rtd) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2229  		if (rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2230  			continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2231  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2232  		bufprintf("w%pK [label=\"%d: %s\"];\n", rtd,
f664a1ed8e4e6c Martin Povišer 2022-08-21  2233  			  rtd->pcm->device, rtd->dai_link->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2234  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2235  	bufprintf("};\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2236  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2237  	/*
f664a1ed8e4e6c Martin Povišer 2022-08-21  2238  	 * Print the playback/capture widgets of DAIs just next to
f664a1ed8e4e6c Martin Povišer 2022-08-21  2239  	 * the user-visible devices. Keep the list of already printed
f664a1ed8e4e6c Martin Povišer 2022-08-21  2240  	 * widgets in 'wdone', so they will be skipped later.
f664a1ed8e4e6c Martin Povišer 2022-08-21  2241  	 */
f664a1ed8e4e6c Martin Povišer 2022-08-21  2242  	for_each_card_rtds(card, rtd) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2243  		for_each_rtd_cpu_dais(rtd, i, dai) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2244  			if (dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2245  				w = dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2246  				bufprintf("w%pK [label=\"%s\"];\n", w, w->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2247  				if (!rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2248  					bufprintf("w%pK -> w%pK;\n", rtd, w);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2249  				wdone[num_wdone] = w;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2250  				if (num_wdone < ARRAY_SIZE(wdone))
f664a1ed8e4e6c Martin Povišer 2022-08-21  2251  					num_wdone++;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2252  			}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2253  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2254  			if (dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2255  				w = dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2256  				bufprintf("w%pK [label=\"%s\"];\n", w, w->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2257  				if (!rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2258  					bufprintf("w%pK -> w%pK;\n", w, rtd);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2259  				wdone[num_wdone] = w;
f664a1ed8e4e6c Martin Povišer 2022-08-21 @2260  				if (num_wdone < ARRAY_SIZE(wdone))
f664a1ed8e4e6c Martin Povišer 2022-08-21  2261  					num_wdone++;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2262  			}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2263  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2264  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2265  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2266  	for_each_card_dapms(card, dapm) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2267  		const char *prefix = soc_dapm_prefix(dapm);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2268  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2269  		if (dapm != &card->dapm) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2270  			bufprintf("subgraph cluster_%d {\n", cluster++);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2271  			if (prefix)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2272  				bufprintf("label=\"%s\";\n", prefix);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2273  			else if (dapm->component)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2274  				bufprintf("label=\"%s\";\n",
f664a1ed8e4e6c Martin Povišer 2022-08-21  2275  					  dapm->component->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2276  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2277  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2278  		for_each_card_widgets(dapm->card, w) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2279  			const char *name = w->name;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2280  			bool skip = false;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2281  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2282  			if (w->dapm != dapm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2283  				continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2284  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2285  			if (list_empty(&w->edges[0]) && list_empty(&w->edges[1]))
f664a1ed8e4e6c Martin Povišer 2022-08-21  2286  				continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2287  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2288  			for (i = 0; i < num_wdone; i++)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2289  				if (wdone[i] == w)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2290  					skip = true;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2291  			if (skip)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2292  				continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2293  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2294  			if (prefix && strlen(name) > strlen(prefix) + 1)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2295  				name += strlen(prefix) + 1;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2296  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2297  			bufprintf("w%pK [label=\"%s\"];\n", w, name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2298  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2299  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2300  		if (dapm != &card->dapm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2301  			bufprintf("}\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2302  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2303  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2304  	list_for_each_entry(p, &card->paths, list) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2305  		if (p->name)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2306  			bufprintf("w%pK -> w%pK [label=\"%s\"];\n",
f664a1ed8e4e6c Martin Povišer 2022-08-21  2307  				  p->source, p->sink, p->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2308  		else
f664a1ed8e4e6c Martin Povišer 2022-08-21  2309  			bufprintf("w%pK -> w%pK;\n", p->source, p->sink);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2310  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2311  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2312  	bufprintf("}\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2313  #undef bufprintf
f664a1ed8e4e6c Martin Povišer 2022-08-21  2314  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2315  	mutex_unlock(&card->dapm_mutex);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2316  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2317  	ret = simple_read_from_buffer(user_buf, count, ppos, buf, ret);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2318  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2319  	kfree(buf);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2320  	return ret;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2321  }
f664a1ed8e4e6c Martin Povišer 2022-08-21  2322  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

* [asahilinux:bits/070-audio 17/37] sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.
@ 2023-10-16  4:43 Dan Carpenter
  0 siblings, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2023-10-16  4:43 UTC (permalink / raw)
  To: oe-kbuild, Martin Povišer; +Cc: lkp, oe-kbuild-all, Hector Martin

tree:   https://github.com/AsahiLinux/linux bits/070-audio
head:   84126be72ac9e0b38c992e806417952deb3cd540
commit: f664a1ed8e4e6cae5697db372d62cac0fafde939 [17/37] ASoC: dapm: Export new 'graph.dot' file in debugfs
config: i386-randconfig-141-20230825 (https://download.01.org/0day-ci/archive/20231014/202310140049.EtXqBptb-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231014/202310140049.EtXqBptb-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202310140049.EtXqBptb-lkp@intel.com/

smatch warnings:
sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.

vim +/num_wdone +2260 sound/soc/soc-dapm.c

f664a1ed8e4e6c Martin Povišer 2022-08-21  2196  static ssize_t dapm_graph_read_file(struct file *file, char __user *user_buf,
f664a1ed8e4e6c Martin Povišer 2022-08-21  2197  				    size_t count, loff_t *ppos)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2198  {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2199  	struct snd_soc_card *card = file->private_data;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2200  	struct snd_soc_dapm_context *dapm;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2201  	struct snd_soc_dapm_path *p;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2202  	struct snd_soc_dapm_widget *w;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2203  	struct snd_soc_pcm_runtime *rtd;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2204  	struct snd_soc_dapm_widget *wdone[16];
f664a1ed8e4e6c Martin Povišer 2022-08-21  2205  	struct snd_soc_dai *dai;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2206  	int i, num_wdone = 0, cluster = 0;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2207  	char *buf;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2208  	ssize_t bufsize;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2209  	ssize_t ret = 0;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2210  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2211  	bufsize = 1024 * card->num_dapm_widgets;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2212  	buf = kmalloc(bufsize, GFP_KERNEL);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2213  	if (!buf)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2214  		return -ENOMEM;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2215  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2216  	mutex_lock(&card->dapm_mutex);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2217  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2218  #define bufprintf(...) \
f664a1ed8e4e6c Martin Povišer 2022-08-21  2219  		ret += scnprintf(buf + ret, bufsize - ret, __VA_ARGS__)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2220  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2221  	bufprintf("digraph dapm {\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2222  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2223  	/*
f664a1ed8e4e6c Martin Povišer 2022-08-21  2224  	 * Print the user-visible devices of the card.
f664a1ed8e4e6c Martin Povišer 2022-08-21  2225  	 */
f664a1ed8e4e6c Martin Povišer 2022-08-21  2226  	bufprintf("subgraph cluster_%d {\n", cluster++);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2227  	bufprintf("label=\"Devices\";style=filled;fillcolor=gray;\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2228  	for_each_card_rtds(card, rtd) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2229  		if (rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2230  			continue;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2231  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2232  		bufprintf("w%pK [label=\"%d: %s\"];\n", rtd,
f664a1ed8e4e6c Martin Povišer 2022-08-21  2233  			  rtd->pcm->device, rtd->dai_link->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2234  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2235  	bufprintf("};\n");
f664a1ed8e4e6c Martin Povišer 2022-08-21  2236  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2237  	/*
f664a1ed8e4e6c Martin Povišer 2022-08-21  2238  	 * Print the playback/capture widgets of DAIs just next to
f664a1ed8e4e6c Martin Povišer 2022-08-21  2239  	 * the user-visible devices. Keep the list of already printed
f664a1ed8e4e6c Martin Povišer 2022-08-21  2240  	 * widgets in 'wdone', so they will be skipped later.
f664a1ed8e4e6c Martin Povišer 2022-08-21  2241  	 */
f664a1ed8e4e6c Martin Povišer 2022-08-21  2242  	for_each_card_rtds(card, rtd) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2243  		for_each_rtd_cpu_dais(rtd, i, dai) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2244  			if (dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2245  				w = dai->stream[SNDRV_PCM_STREAM_PLAYBACK].widget;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2246  				bufprintf("w%pK [label=\"%s\"];\n", w, w->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2247  				if (!rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2248  					bufprintf("w%pK -> w%pK;\n", rtd, w);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2249  				wdone[num_wdone] = w;
                                                                                ^^^^^^^^^^^^^^^^^^^^^
Set's memory

f664a1ed8e4e6c Martin Povišer 2022-08-21  2250  				if (num_wdone < ARRAY_SIZE(wdone))

Checks if the assignment was out of bounds.  Maybe this should
be:

	if ((num_wdone + 1 < ARRAY_SIZE(wdone))

f664a1ed8e4e6c Martin Povišer 2022-08-21  2251  					num_wdone++;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2252  			}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2253  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2254  			if (dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2255  				w = dai->stream[SNDRV_PCM_STREAM_CAPTURE].widget;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2256  				bufprintf("w%pK [label=\"%s\"];\n", w, w->name);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2257  				if (!rtd->dai_link->no_pcm)
f664a1ed8e4e6c Martin Povišer 2022-08-21  2258  					bufprintf("w%pK -> w%pK;\n", w, rtd);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2259  				wdone[num_wdone] = w;
f664a1ed8e4e6c Martin Povišer 2022-08-21 @2260  				if (num_wdone < ARRAY_SIZE(wdone))

Same

f664a1ed8e4e6c Martin Povišer 2022-08-21  2261  					num_wdone++;
f664a1ed8e4e6c Martin Povišer 2022-08-21  2262  			}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2263  		}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2264  	}
f664a1ed8e4e6c Martin Povišer 2022-08-21  2265  
f664a1ed8e4e6c Martin Povišer 2022-08-21  2266  	for_each_card_dapms(card, dapm) {
f664a1ed8e4e6c Martin Povišer 2022-08-21  2267  		const char *prefix = soc_dapm_prefix(dapm);
f664a1ed8e4e6c Martin Povišer 2022-08-21  2268  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki


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

end of thread, other threads:[~2023-10-16  4:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-25 15:59 [asahilinux:bits/070-audio 17/37] sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2023-10-13 17:01 kernel test robot
2023-10-16  4:43 Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.