All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Dan Carpenter <error27@gmail.com>
Subject: [asahilinux:bits/070-audio 17/37] sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use.
Date: Fri, 25 Aug 2023 23:59:07 +0800	[thread overview]
Message-ID: <202308252346.7wpnLutf-lkp@intel.com> (raw)

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

             reply	other threads:[~2023-08-25 16:00 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-25 15:59 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-10-13 17:01 [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
2023-10-16  4:43 Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202308252346.7wpnLutf-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=error27@gmail.com \
    --cc=oe-kbuild@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.