lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Tue, 25 Oct 2022 10:05:48 +0300
From:   Dan Carpenter <dan.carpenter@...cle.com>
To:     kbuild@...ts.01.org, Roman Li <Roman.Li@....com>
Cc:     lkp@...el.com, kbuild-all@...ts.01.org,
        linux-kernel@...r.kernel.org,
        Alex Deucher <alexander.deucher@....com>,
        Wayne Lin <Wayne.Lin@....com>
Subject: drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2730
 dm_resume() error: we previously assumed 'aconnector->dc_link' could be null
 (see line 2717)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   337a0a0b63f1c30195733eaacf39e4310a592a68
commit: f4346fb3edf7720db3f7f5e1cab1f667cd024280 drm/amd/display: Fix allocate_mst_payload assert on resume
config: mips-randconfig-m031-20221018
compiler: mips64el-linux-gcc (GCC) 12.1.0

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

New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2730 dm_resume() error: we previously assumed 'aconnector->dc_link' could be null (see line 2717)

Old smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:1747 amdgpu_dm_fini() warn: variable dereferenced before check 'adev->dm.dc' (see line 1720)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4019 amdgpu_dm_backlight_update_status() error: testing array offset 'i' after use.
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4061 amdgpu_dm_backlight_get_brightness() error: testing array offset 'i' after use.
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:6530 create_stream_for_sink() error: we previously assumed 'aconnector->dc_sink' could be null (see line 6429)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:8918 handle_cursor_update() error: we previously assumed 'afb' could be null (see line 8877)

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

4562236b3bc0a2 Harry Wentland      2017-09-12  2606  static int dm_resume(void *handle)
4562236b3bc0a2 Harry Wentland      2017-09-12  2607  {
4562236b3bc0a2 Harry Wentland      2017-09-12  2608  	struct amdgpu_device *adev = handle;
4a580877bdcb83 Luben Tuikov        2020-08-24  2609  	struct drm_device *ddev = adev_to_drm(adev);
4562236b3bc0a2 Harry Wentland      2017-09-12  2610  	struct amdgpu_display_manager *dm = &adev->dm;
c84dec2fe8837f Harry Wentland      2017-09-05  2611  	struct amdgpu_dm_connector *aconnector;
4562236b3bc0a2 Harry Wentland      2017-09-12  2612  	struct drm_connector *connector;
f8d2d39eb40694 Lyude Paul          2019-09-03  2613  	struct drm_connector_list_iter iter;
4562236b3bc0a2 Harry Wentland      2017-09-12  2614  	struct drm_crtc *crtc;
c2cea7063b85fc Leo (Sunpeng  Li    2017-10-12  2615) 	struct drm_crtc_state *new_crtc_state;
fcb4019e090b95 Leo (Sunpeng  Li    2017-11-01  2616) 	struct dm_crtc_state *dm_new_crtc_state;
fcb4019e090b95 Leo (Sunpeng  Li    2017-11-01  2617) 	struct drm_plane *plane;
fcb4019e090b95 Leo (Sunpeng  Li    2017-11-01  2618) 	struct drm_plane_state *new_plane_state;
fcb4019e090b95 Leo (Sunpeng  Li    2017-11-01  2619) 	struct dm_plane_state *dm_new_plane_state;
113b7a01087211 Leo Li              2019-03-19  2620  	struct dm_atomic_state *dm_state = to_dm_atomic_state(dm->atomic_obj.state);
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2621  	enum dc_connection_type new_connection_type = dc_connection_none;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2622  	struct dc_state *dc_state;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2623  	int i, r, j;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2624  
53b3f8f40e6cff Dennis Li           2020-08-19  2625  	if (amdgpu_in_reset(adev)) {
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2626  		dc_state = dm->cached_dc_state;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2627  
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2628  		/*
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2629  		 * The dc->current_state is backed up into dm->cached_dc_state
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2630  		 * before we commit 0 streams.
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2631  		 *
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2632  		 * DC will clear link encoder assignments on the real state
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2633  		 * but the changes won't propagate over to the copy we made
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2634  		 * before the 0 streams commit.
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2635  		 *
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2636  		 * DC expects that link encoder assignments are *not* valid
32685b32d825ca Nicholas Kazlauskas 2022-02-28  2637  		 * when committing a state, so as a workaround we can copy
32685b32d825ca Nicholas Kazlauskas 2022-02-28  2638  		 * off of the current state.
32685b32d825ca Nicholas Kazlauskas 2022-02-28  2639  		 *
32685b32d825ca Nicholas Kazlauskas 2022-02-28  2640  		 * We lose the previous assignments, but we had already
32685b32d825ca Nicholas Kazlauskas 2022-02-28  2641  		 * commit 0 streams anyway.
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2642  		 */
32685b32d825ca Nicholas Kazlauskas 2022-02-28  2643  		link_enc_cfg_copy(adev->dm.dc->current_state, dc_state);
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09  2644  
af6902ec415655 Nicholas Kazlauskas 2021-11-23  2645  		if (dc_enable_dmub_notifications(adev->dm.dc))
524a0ba6fab955 Nicholas Kazlauskas 2021-11-08  2646  			amdgpu_dm_outbox_init(adev);
524a0ba6fab955 Nicholas Kazlauskas 2021-11-08  2647  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2648  		r = dm_dmub_hw_init(adev);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2649  		if (r)
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2650  			DRM_ERROR("DMUB interface failed to initialize: status=%d\n", r);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2651  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2652  		dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2653  		dc_resume(dm->dc);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2654  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2655  		amdgpu_dm_irq_resume_early(adev);
4562236b3bc0a2 Harry Wentland      2017-09-12  2656  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2657  		for (i = 0; i < dc_state->stream_count; i++) {
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2658  			dc_state->streams[i]->mode_changed = true;
6984fa418b8efd Nicholas Kazlauskas 2021-11-09  2659  			for (j = 0; j < dc_state->stream_status[i].plane_count; j++) {
6984fa418b8efd Nicholas Kazlauskas 2021-11-09  2660  				dc_state->stream_status[i].plane_states[j]->update_flags.raw
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2661  					= 0xffffffff;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2662  			}
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2663  		}
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2664  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2665  		WARN_ON(!dc_commit_state(dm->dc, dc_state));
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2666  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2667  		dm_gpureset_commit_state(dm->cached_dc_state, dm);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2668  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2669  		dm_gpureset_toggle_interrupts(adev, dm->cached_dc_state, true);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2670  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2671  		dc_release_state(dm->cached_dc_state);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2672  		dm->cached_dc_state = NULL;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2673  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2674  		amdgpu_dm_irq_resume_late(adev);
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2675  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2676  		mutex_unlock(&dm->dc_lock);
4562236b3bc0a2 Harry Wentland      2017-09-12  2677  
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2678  		return 0;
cdaae8371aa9d4 Bhawanpreet Lakha   2020-05-11  2679  	}
113b7a01087211 Leo Li              2019-03-19  2680  	/* Recreate dc_state - DC invalidates it when setting power state to S3. */
113b7a01087211 Leo Li              2019-03-19  2681  	dc_release_state(dm_state->context);
113b7a01087211 Leo Li              2019-03-19  2682  	dm_state->context = dc_create_state(dm->dc);
113b7a01087211 Leo Li              2019-03-19  2683  	/* TODO: Remove dc_state->dccg, use dc->dccg directly. */
113b7a01087211 Leo Li              2019-03-19  2684  	dc_resource_state_construct(dm->dc, dm_state->context);
113b7a01087211 Leo Li              2019-03-19  2685  
af6902ec415655 Nicholas Kazlauskas 2021-11-23  2686  	/* Re-enable outbox interrupts for DPIA. */
af6902ec415655 Nicholas Kazlauskas 2021-11-23  2687  	if (dc_enable_dmub_notifications(adev->dm.dc))
af6902ec415655 Nicholas Kazlauskas 2021-11-23  2688  		amdgpu_dm_outbox_init(adev);
af6902ec415655 Nicholas Kazlauskas 2021-11-23  2689  
8c7aea404d55da Nicholas Kazlauskas 2019-11-25  2690  	/* Before powering on DC we need to re-initialize DMUB. */
79d6b9351f086e Nicholas Kazlauskas 2021-12-15  2691  	dm_dmub_hw_resume(adev);
8c7aea404d55da Nicholas Kazlauskas 2019-11-25  2692  
a80aa93de1a0e6 Mikita Lipski       2018-02-03  2693  	/* power on hardware */
a80aa93de1a0e6 Mikita Lipski       2018-02-03  2694  	dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
a80aa93de1a0e6 Mikita Lipski       2018-02-03  2695  
4562236b3bc0a2 Harry Wentland      2017-09-12  2696  	/* program HPD filter */
4562236b3bc0a2 Harry Wentland      2017-09-12  2697  	dc_resume(dm->dc);
4562236b3bc0a2 Harry Wentland      2017-09-12  2698  
4562236b3bc0a2 Harry Wentland      2017-09-12  2699  	/*
4562236b3bc0a2 Harry Wentland      2017-09-12  2700  	 * early enable HPD Rx IRQ, should be done before set mode as short
4562236b3bc0a2 Harry Wentland      2017-09-12  2701  	 * pulse interrupts are used for MST
4562236b3bc0a2 Harry Wentland      2017-09-12  2702  	 */
4562236b3bc0a2 Harry Wentland      2017-09-12  2703  	amdgpu_dm_irq_resume_early(adev);
4562236b3bc0a2 Harry Wentland      2017-09-12  2704  
684cd480fd4e6d Lyude Paul          2019-09-25  2705  	/* On resume we need to rewrite the MSTM control bits to enable MST*/
684cd480fd4e6d Lyude Paul          2019-09-25  2706  	s3_handle_mst(ddev, false);
684cd480fd4e6d Lyude Paul          2019-09-25  2707  
4562236b3bc0a2 Harry Wentland      2017-09-12  2708  	/* Do detection*/
f8d2d39eb40694 Lyude Paul          2019-09-03  2709  	drm_connector_list_iter_begin(ddev, &iter);
f8d2d39eb40694 Lyude Paul          2019-09-03  2710  	drm_for_each_connector_iter(connector, &iter) {
c84dec2fe8837f Harry Wentland      2017-09-05  2711  		aconnector = to_amdgpu_dm_connector(connector);
4562236b3bc0a2 Harry Wentland      2017-09-12  2712  
4562236b3bc0a2 Harry Wentland      2017-09-12  2713  		/*
4562236b3bc0a2 Harry Wentland      2017-09-12  2714  		 * this is the case when traversing through already created
4562236b3bc0a2 Harry Wentland      2017-09-12  2715  		 * MST connectors, should be skipped
4562236b3bc0a2 Harry Wentland      2017-09-12  2716  		 */
f4346fb3edf772 Roman Li            2022-03-17 @2717  		if (aconnector->dc_link &&
                                                                    ^^^^^^^^^^^^^^^^^^^
Probably this check can be deleted...

f4346fb3edf772 Roman Li            2022-03-17  2718  		    aconnector->dc_link->type == dc_connection_mst_branch)
4562236b3bc0a2 Harry Wentland      2017-09-12  2719  			continue;
4562236b3bc0a2 Harry Wentland      2017-09-12  2720  
03ea364c8e156b Arindam Nath        2017-04-26  2721  		mutex_lock(&aconnector->hpd_lock);
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2722  		if (!dc_link_detect_sink(aconnector->dc_link, &new_connection_type))
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2723  			DRM_ERROR("KMS: Failed to detect connector\n");
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2724  
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2725  		if (aconnector->base.force && new_connection_type == dc_connection_none)
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2726  			emulated_link_detect(aconnector->dc_link);
fbbdadf2faf17c Bhawanpreet Lakha   2018-09-26  2727  		else
8f38b66c826188 Hersen Wu           2017-09-11  2728  			dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD);
3eb4eba42263cc Roman Li            2017-10-20  2729  
3eb4eba42263cc Roman Li            2017-10-20 @2730  		if (aconnector->fake_enable && aconnector->dc_link->local_sink)
                                                                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The other code does not bother to check.

3eb4eba42263cc Roman Li            2017-10-20  2731  			aconnector->fake_enable = false;
3eb4eba42263cc Roman Li            2017-10-20  2732  
dcd5fb82ffb484 Mathias Fröhlich    2019-02-10  2733  		if (aconnector->dc_sink)

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

Powered by blists - more mailing lists