linux icon indicating copy to clipboard operation
linux copied to clipboard

CI check error: use of uninitialized value ‘be_rate’

Open bardliao opened this issue 1 year ago • 0 comments

sound/soc/sof/ipc4-pcm.c: In function ‘sof_ipc4_pcm_dai_link_fixup_rate’:
sound/soc/sof/ipc4-pcm.c:641:27: error: use of uninitialized value ‘be_rate’ [CWE-457] [-Werror=analyzer-use-of-uninitialized-value]
  641 |                 rate->min = be_rate;
      |                 ~~~~~~~~~~^~~~~~~~~
  ‘sof_ipc4_pcm_dai_link_fixup_rate’: events 1-3
    |
    |  605 |         unsigned int be_rate;
    |      |                      ^~~~~~~
    |      |                      |
    |      |                      (1) region created on stack here
    |      |                      (2) capacity: 4 bytes
    |......
    |  608 |         if (WARN_ON_ONCE(!num_input_formats))
    |      |            ~          
    |      |            |
    |      |            (3) following ‘false’ branch...
    |
  ‘sof_ipc4_pcm_dai_link_fixup_rate’: event 4
    |
    |cc1:
    | (4): ...to here
    |
  ‘sof_ipc4_pcm_dai_link_fixup_rate’: events 5-11
    |
    |  615 |         for (i = 0; i < num_input_formats; i++) {
    |      |                     ~~^~~~~~~~~~~~~~~~~~~
    |      |                       |
    |      |                       (5) following ‘false’ branch (when ‘i >= num_input_formats’)...
    |......
    |  635 |         if (!fe_be_rate_match) {
    |      |            ~           
    |      |            |
    |      |            (6) ...to here
    |      |            (7) following ‘false’ branch (when ‘fe_be_rate_match == 0’)...
    |  636 |                 if (!single_be_rate) {
    |      |                    ~   
    |      |                    |
    |      |                    (8) ...to here
    |      |                    (9) following ‘true’ branch (when ‘single_be_rate != 0’)...
    |......
    |  641 |                 rate->min = be_rate;
    |      |                 ~~~~~~~~~~~~~~~~~~~
    |      |                           |
    |      |                           (10) ...to here
    |      |                           (11) use of uninitialized value ‘be_rate’ here
    |
sound/soc/sof/ipc4-pcm.c:641:27: error: use of uninitialized value ‘be_rate’ [CWE-457] [-Werror=analyzer-use-of-uninitialized-value]
  641 |                 rate->min = be_rate;
      |                 ~~~~~~~~~~^~~~~~~~~
  ‘sof_ipc4_pcm_dai_link_fixup’: events 1-4
    |
    |  648 | static int sof_ipc4_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
    |      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |            |
    |      |            (1) entry to ‘sof_ipc4_pcm_dai_link_fixup’
    |......
    |  662 |         if (!dai) {
    |      |            ~
    |      |            |
    |      |            (2) following ‘false’ branch (when ‘dai’ is non-NULL)...
    |......
    |  668 |         ipc4_copier = dai->private;
    |      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |                     |
    |      |                     (3) ...to here
    |  669 |         if (!ipc4_copier) {
    |      |            ~
    |      |            |
    |      |            (4) following ‘false’ branch (when ‘ipc4_copier’ is non-NULL)...
    |
  ‘sof_ipc4_pcm_dai_link_fixup’: event 5
    |
    |cc1:
    | (5): ...to here
    |
  ‘sof_ipc4_pcm_dai_link_fixup’: event 6
    |
    |./include/sound/pcm.h:701:21:
    |  701 |              stream <= SNDRV_PCM_STREAM_LAST;           \
sound/soc/sof/ipc4-pcm.c:675:9: note: in expansion of macro ‘for_each_pcm_streams’
    |  675 |         for_each_pcm_streams(dir) {
    |      |         ^~~~~~~~~~~~~~~~~~~~
    |
  ‘sof_ipc4_pcm_dai_link_fixup’: event 7
    |
    |  676 |                 struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, dir);
    |      |                                                 ^
    |      |                                                 |
    |      |                                                 (7) inlined call to ‘snd_soc_dai_get_widget’ from ‘sof_ipc4_pcm_dai_link_fixup’
    |
    +--> ‘snd_soc_dai_get_widget’: event 8
           |
           |./include/sound/soc-dai.h:483:27:
           |  483 |         return dai->stream[stream].widget;
           |      |                ~~~~~~~~~~~^~~~~~~~
           |      |                           |
           |      |                           (8) ...to here
           |
    <------+
    |
  ‘sof_ipc4_pcm_dai_link_fixup’: event 9
    |
    |sound/soc/sof/ipc4-pcm.c:707:15:
    |  707 |         ret = sof_ipc4_pcm_dai_link_fixup_rate(sdev, params, ipc4_copier);
    |      |               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |               |
    |      |               (9) calling ‘sof_ipc4_pcm_dai_link_fixup_rate’ from ‘sof_ipc4_pcm_dai_link_fixup’
    |
    +--> ‘sof_ipc4_pcm_dai_link_fixup_rate’: events 10-13
           |
           |  595 | static int sof_ipc4_pcm_dai_link_fixup_rate(struct snd_sof_dev *sdev,
           |      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |            |
           |      |            (10) entry to ‘sof_ipc4_pcm_dai_link_fixup_rate’
           |......
           |  605 |         unsigned int be_rate;
           |      |                      ~~~~~~~
           |      |                      |
           |      |                      (11) region created on stack here
           |      |                      (12) capacity: 4 bytes
           |......
           |  608 |         if (WARN_ON_ONCE(!num_input_formats))
           |      |            ~
           |      |            |
           |      |            (13) following ‘false’ branch...
           |
         ‘sof_ipc4_pcm_dai_link_fixup_rate’: event 14
           |
           |cc1:
           | (14): ...to here
           |
         ‘sof_ipc4_pcm_dai_link_fixup_rate’: events 15-21
           |
           |  615 |         for (i = 0; i < num_input_formats; i++) {
           |      |                     ~~^~~~~~~~~~~~~~~~~~~
           |      |                       |
           |      |                       (15) following ‘false’ branch (when ‘i >= num_input_formats’)...
           |......
           |  635 |         if (!fe_be_rate_match) {
           |      |            ~           
           |      |            |
           |      |            (16) ...to here
           |      |            (17) following ‘false’ branch (when ‘fe_be_rate_match == 0’)...
           |  636 |                 if (!single_be_rate) {
           |      |                    ~   
           |      |                    |
           |      |                    (18) ...to here
           |      |                    (19) following ‘true’ branch (when ‘single_be_rate != 0’)...
           |......
           |  641 |                 rate->min = be_rate;
           |      |                 ~~~~~~~~~~~~~~~~~~~
           |      |                           |
           |      |                           (20) ...to here
           |      |                           (21) use of uninitialized value ‘be_rate’ here
           |

This is bogus as ‘be_rate’ will always be assigned when i == 0 in the for loop. And the for loop starts with i == 0.

bardliao avatar Jan 14 '25 12:01 bardliao