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: Sat, 14 Oct 2023 01:01:19 +0800 [thread overview]
Message-ID: <202310140049.EtXqBptb-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: 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
next reply other threads:[~2023-10-13 17:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-13 17:01 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2023-10-16 4:43 [asahilinux:bits/070-audio 17/37] sound/soc/soc-dapm.c:2260 dapm_graph_read_file() error: testing array offset 'num_wdone' after use Dan Carpenter
2023-08-25 15:59 kernel test robot
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=202310140049.EtXqBptb-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.