Hi Vinod,

kernel test robot noticed the following build warnings:

https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    
https://github.com/intel-lab-lkp/linux/commits/Vinod-Govindapillai/drm-i915-display-get-rid-of-encoder-param-in-intel_audio_compute_config/20241008-163033
base:   git://anongit.freedesktop.org/drm-intel for-linux-next
patch link:    
https://lore.kernel.org/r/20241008082327.342020-7-vinod.govindapillai%40intel.com
patch subject: [PATCH 6/9] drm/i915/display: iterare through channels if no 
feasible frequencies
config: x86_64-randconfig-161-20241009 
(https://download.01.org/0day-ci/archive/20241010/202410100801.8jzbrn3y-...@intel.com/config)
compiler: clang version 18.1.8 (https://github.com/llvm/llvm-project 
3b5b5c1ec4a3095ab096dd780e84d7ab81f3d7ff)

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 <l...@intel.com>
| Reported-by: Dan Carpenter <dan.carpen...@linaro.org>
| Closes: https://lore.kernel.org/r/202410100801.8jzbrn3y-...@intel.com/

smatch warnings:
drivers/gpu/drm/i915/display/intel_audio.c:789 intel_audio_compute_sad() error: 
uninitialized symbol 'sad_freq'.

vim +/sad_freq +789 drivers/gpu/drm/i915/display/intel_audio.c

0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  764  static void 
intel_audio_compute_sad(struct drm_i915_private *i915,
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  765                             
    int line_freq_khz, int hblank_slots_lanes,
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  766                             
    int avail_overhead, int req_overhead,
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  767                             
    struct cea_sad *sad)
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  768  {
e2675520fb74591 Vinod Govindapillai 2024-10-08  769     u8 channels;
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  770     u8 sad_freq;
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  771  
e2675520fb74591 Vinod Govindapillai 2024-10-08  772     /*
e2675520fb74591 Vinod Govindapillai 2024-10-08  773      * If we don't find any 
supported audio frequencies for a channel,
e2675520fb74591 Vinod Govindapillai 2024-10-08  774      * reduce the channel 
and try
e2675520fb74591 Vinod Govindapillai 2024-10-08  775      */
e2675520fb74591 Vinod Govindapillai 2024-10-08  776     for (channels = 
sad->channels + 1; channels >= 1; channels--) {

This driver is old.  In the era when this driver was written, we used to just
say that if you hit this bug then you deserved it.  We wouldn't bother to fix
something like this.  These days we have syzbot doing millions of stupid things
per second to try break the kernel.

You'd have to use the /proc file to set sad->channels to 255.  Then channels
would be zero and we wouldn't enter the loop.  Potentially, we could add some
sanity checking to snd_hdmi_write_eld_info()?  Another idea would be to make
channels an int instead of a u8.

My other concern is with the "+ 1".  In drm_edid_cta_sad_set() we set channels
as:

        cta_sad->channels = sad[0] & 0x07;

fine.  But in hdmi_update_short_audio_desc() we set channels as:

        a->channels = GRAB_BITS(buf, 0, 0, 3);
        a->channels++;

The first line is exact same in both functions but in 
hdmi_update_short_audio_desc()
we add "+ 1" and then we add another "+ 1" in this intel_audio_compute_sad()
function.  I suspect the a->channels++; line should be deleted.

0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  777             sad_freq = 
intel_audio_get_pruned_audfreq(i915, line_freq_khz,
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  778                             
                          hblank_slots_lanes,
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  779                             
                          avail_overhead,
e2675520fb74591 Vinod Govindapillai 2024-10-08  780                             
                          req_overhead,
e2675520fb74591 Vinod Govindapillai 2024-10-08  781                             
                          channels,
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  782                             
                          sad->freq);
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  783  
e2675520fb74591 Vinod Govindapillai 2024-10-08  784             /* Supported 
frequencies exist! No need to proceed further */
e2675520fb74591 Vinod Govindapillai 2024-10-08  785             if (sad_freq)
e2675520fb74591 Vinod Govindapillai 2024-10-08  786                     break;
e2675520fb74591 Vinod Govindapillai 2024-10-08  787     }
e2675520fb74591 Vinod Govindapillai 2024-10-08  788  
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08 @789     sad->freq = sad_freq;
e2675520fb74591 Vinod Govindapillai 2024-10-08  790     sad->channels = 
channels ? channels - 1 : 0;
0f1adcd58da8c47 Vinod Govindapillai 2024-10-08  791  }

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

Reply via email to