drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:1699 amdgpu_dm_fini() error: we previously assumed 'adev->dm.dc' could be null (see line 1695)

From: Dan Carpenter
Date: Mon Dec 12 2022 - 02:21:46 EST


Hi Stafford,

First bad commit (maybe != root cause):

tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 296a7b7eb79246912de31ee799cb85220931231a
commit: ded2ee36313c941f1a12b6f85cde295b575264ae openrisc: Add pci bus support
config: openrisc-randconfig-m031-20221210
compiler: or1k-linux-gcc (GCC) 12.1.0

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

New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:1699 amdgpu_dm_fini() error: we previously assumed 'adev->dm.dc' could be null (see line 1695)

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:5409 fill_blending_from_plane_state() warn: variable dereferenced before check 'per_pixel_alpha' (see line 5384)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:6504 create_stream_for_sink() error: we previously assumed 'aconnector->dc_sink' could be null (see line 6403)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:8891 handle_cursor_update() error: we previously assumed 'afb' could be null (see line 8850)

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

7578ecda14d521 Alex Deucher 2017-10-10 1667 static void amdgpu_dm_fini(struct amdgpu_device *adev)
4562236b3bc0a2 Harry Wentland 2017-09-12 1668 {
f74367e492ba24 Alex Deucher 2020-07-10 1669 int i;
f74367e492ba24 Alex Deucher 2020-07-10 1670
09a5df6c444cf0 Nicholas Kazlauskas 2021-08-03 1671 if (adev->dm.vblank_control_workqueue) {
09a5df6c444cf0 Nicholas Kazlauskas 2021-08-03 1672 destroy_workqueue(adev->dm.vblank_control_workqueue);
09a5df6c444cf0 Nicholas Kazlauskas 2021-08-03 1673 adev->dm.vblank_control_workqueue = NULL;
09a5df6c444cf0 Nicholas Kazlauskas 2021-08-03 1674 }
09a5df6c444cf0 Nicholas Kazlauskas 2021-08-03 1675
f74367e492ba24 Alex Deucher 2020-07-10 1676 for (i = 0; i < adev->dm.display_indexes_num; i++) {
f74367e492ba24 Alex Deucher 2020-07-10 1677 drm_encoder_cleanup(&adev->dm.mst_encoders[i].base);
f74367e492ba24 Alex Deucher 2020-07-10 1678 }
f74367e492ba24 Alex Deucher 2020-07-10 1679
4562236b3bc0a2 Harry Wentland 2017-09-12 1680 amdgpu_dm_destroy_drm_device(&adev->dm);
c8bdf2b63e5b6b Emily Deng 2019-05-27 1681
9a65df19310859 Wayne Lin 2021-03-02 1682 #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY)
9a65df19310859 Wayne Lin 2021-03-02 1683 if (adev->dm.crc_rd_wrk) {
9a65df19310859 Wayne Lin 2021-03-02 1684 flush_work(&adev->dm.crc_rd_wrk->notify_ta_work);
9a65df19310859 Wayne Lin 2021-03-02 1685 kfree(adev->dm.crc_rd_wrk);
9a65df19310859 Wayne Lin 2021-03-02 1686 adev->dm.crc_rd_wrk = NULL;
9a65df19310859 Wayne Lin 2021-03-02 1687 }
9a65df19310859 Wayne Lin 2021-03-02 1688 #endif
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1689 #ifdef CONFIG_DRM_AMD_DC_HDCP
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1690 if (adev->dm.hdcp_workqueue) {
e96b1b2974989c Nirmoy Das 2021-02-10 1691 hdcp_destroy(&adev->dev->kobj, adev->dm.hdcp_workqueue);
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1692 adev->dm.hdcp_workqueue = NULL;
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1693 }
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1694
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 @1695 if (adev->dm.dc)
^^^^^^^^^^^
Checked for NULL

52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1696 dc_deinit_callbacks(adev->dm.dc);
52704fcaf74bc9 Bhawanpreet Lakha 2019-05-24 1697 #endif
51ba691206e354 Qingqing Zhuo 2021-03-09 1698
9a71c7d31734f7 Nicholas Kazlauskas 2019-10-28 @1699 dc_dmub_srv_destroy(&adev->dm.dc->ctx->dmub_srv);
^^^^^^^^^^^
and then dereferenced without checking.

9a71c7d31734f7 Nicholas Kazlauskas 2019-10-28 1700
81927e2808be5a Jude Shih 2021-04-20 1701 if (dc_enable_dmub_notifications(adev->dm.dc)) {
81927e2808be5a Jude Shih 2021-04-20 1702 kfree(adev->dm.dmub_notify);
81927e2808be5a Jude Shih 2021-04-20 1703 adev->dm.dmub_notify = NULL;
e27c41d5b0681c Jude Shih 2021-07-25 1704 destroy_workqueue(adev->dm.delayed_hpd_wq);
e27c41d5b0681c Jude Shih 2021-07-25 1705 adev->dm.delayed_hpd_wq = NULL;
81927e2808be5a Jude Shih 2021-04-20 1706 }
81927e2808be5a Jude Shih 2021-04-20 1707
743b9786b14ae0 Nicholas Kazlauskas 2019-10-24 1708 if (adev->dm.dmub_bo)

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