drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:5412 fill_blending_from_plane_state() warn: variable dereferenced before check 'per_pixel_alpha' (see line 5387)

From: Dan Carpenter
Date: Mon Jun 20 2022 - 04:56:27 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 4b35035bcf80ddb47c0112c4fbd84a63a2836a18
commit: 76818cdd11a25ac6cb1d98875719935d8d0e2e51 drm/amd/display: add Coverage blend mode for overlay plane
config: ia64-randconfig-m031-20220616 (https://download.01.org/0day-ci/archive/20220619/202206191752.JhkxXCi7-lkp@xxxxxxxxx/config)
compiler: ia64-linux-gcc (GCC) 11.3.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>

New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:5412 fill_blending_from_plane_state() warn: variable dereferenced before check 'per_pixel_alpha' (see line 5387)

Old smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:1726 amdgpu_dm_fini() warn: variable dereferenced before check 'adev->dm.dc' (see line 1699)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2707 dm_resume() error: we previously assumed 'aconnector->dc_link' could be null (see line 2694)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:3995 amdgpu_dm_backlight_update_status() error: testing array offset 'i' after use.
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4037 amdgpu_dm_backlight_get_brightness() error: testing array offset 'i' after use.
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:6507 create_stream_for_sink() error: we previously assumed 'aconnector->dc_sink' could be null (see line 6406)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:8894 handle_cursor_update() error: we previously assumed 'afb' could be null (see line 8853)

vim +/per_pixel_alpha +5412 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c

d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5382 static void
695af5f9a51914 Nicholas Kazlauskas 2019-03-28 5383 fill_blending_from_plane_state(const struct drm_plane_state *plane_state,
76818cdd11a25a Sung Joon Kim 2022-05-19 5384 bool *per_pixel_alpha, bool *pre_multiplied_alpha,
76818cdd11a25a Sung Joon Kim 2022-05-19 5385 bool *global_alpha, int *global_alpha_value)
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5386 {
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 @5387 *per_pixel_alpha = false;

Dereference

76818cdd11a25a Sung Joon Kim 2022-05-19 5388 *pre_multiplied_alpha = true;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5389 *global_alpha = false;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5390 *global_alpha_value = 0xff;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5391
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5392 if (plane_state->plane->type != DRM_PLANE_TYPE_OVERLAY)
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5393 return;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5394
76818cdd11a25a Sung Joon Kim 2022-05-19 5395 if (plane_state->pixel_blend_mode == DRM_MODE_BLEND_PREMULTI ||
76818cdd11a25a Sung Joon Kim 2022-05-19 5396 plane_state->pixel_blend_mode == DRM_MODE_BLEND_COVERAGE) {
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5397 static const uint32_t alpha_formats[] = {
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5398 DRM_FORMAT_ARGB8888,
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5399 DRM_FORMAT_RGBA8888,
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5400 DRM_FORMAT_ABGR8888,
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5401 };
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5402 uint32_t format = plane_state->fb->format->format;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5403 unsigned int i;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5404
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5405 for (i = 0; i < ARRAY_SIZE(alpha_formats); ++i) {
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5406 if (format == alpha_formats[i]) {
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5407 *per_pixel_alpha = true;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5408 break;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5409 }
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5410 }
76818cdd11a25a Sung Joon Kim 2022-05-19 5411
76818cdd11a25a Sung Joon Kim 2022-05-19 @5412 if (per_pixel_alpha && plane_state->pixel_blend_mode == DRM_MODE_BLEND_COVERAGE)

No point in checking "per_pixel_alpha". I think it's supposed to be
checking asterisks "*per_pixel_alpha" instead.

76818cdd11a25a Sung Joon Kim 2022-05-19 5413 *pre_multiplied_alpha = false;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5414 }
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5415
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5416 if (plane_state->alpha < 0xffff) {
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5417 *global_alpha = true;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5418 *global_alpha_value = plane_state->alpha >> 8;
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5419 }
d74004b694ea88 Nicholas Kazlauskas 2019-02-21 5420 }

--
0-DAY CI Kernel Test Service
https://01.org/lkp