* [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* [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
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-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
-- strict thread matches above, loose matches on Subject: below --
2023-10-16 4:43 Dan Carpenter
2023-08-25 15:59 kernel test robot
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.