:::::: :::::: Manual check reason: "low confidence bisect report" :::::: Manual check reason: "low confidence static check first_new_problem: drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:10578:9: warning: use of NULL 'data' where non-null expected [CWE-476] [-Wanalyzer-null-argument]" ::::::
CC: [email protected] BCC: [email protected] CC: [email protected] TO: Stylon Wang <[email protected]> CC: Alex Deucher <[email protected]> CC: Nicholas Kazlauskas <[email protected]> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 69cb6c6556ad89620547318439d6be8bb1629a5a commit: 46db138dc83ae16e188038358c925c560110f804 drm/amd/display: Add Freesync HDMI support to DM with DMUB date: 12 months ago :::::: branch date: 24 hours ago :::::: commit date: 12 months ago config: arm-randconfig-c002-20220703 (https://download.01.org/0day-ci/archive/20220704/[email protected]/config) compiler: arm-linux-gnueabi-gcc (GCC) 11.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=46db138dc83ae16e188038358c925c560110f804 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 46db138dc83ae16e188038358c925c560110f804 # save the config file ARCH=arm KBUILD_USERCFLAGS='-fanalyzer -Wno-error' If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> gcc-analyzer warnings: (new ones prefixed by >>) | | ~ | | | | | (8) ...to here | | (9) following 'false' branch (when 'old_plane_crtc' is non-NULL)... | 'dm_update_plane_state': event 10 | |include/drm/drm_atomic.h:542:21: | 542 | return state->crtcs[drm_crtc_index(crtc)].old_state; | | ~~~~~^~~~~~~ | | | | | (10) ...to here | 'dm_update_plane_state': event 11 | |drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:9953:20: | 9953 | if (!dm_old_crtc_state->stream) | | ^ | | | | | (11) following 'false' branch... | 'dm_update_plane_state': event 12 | |include/drm/drm_print.h:516:9: | 516 | __drm_dbg(DRM_UT_ATOMIC, fmt, ##__VA_ARGS__) | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (12) ...to here drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:9956:17: note: in expansion of macro 'DRM_DEBUG_ATOMIC' | 9956 | DRM_DEBUG_ATOMIC("Disabling DRM plane: %d on DRM crtc %d\n", | | ^~~~~~~~~~~~~~~~ | 'dm_update_plane_state': event 13 | | 9959 | ret = dm_atomic_get_state(state, &dm_state); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (13) calling 'dm_atomic_get_state' from 'dm_update_plane_state' | +--> 'dm_atomic_get_state': events 14-18 | | 3287 | static int dm_atomic_get_state(struct drm_atomic_state *state, | | ^~~~~~~~~~~~~~~~~~~ | | | | | (14) entry to 'dm_atomic_get_state' |...... | 3295 | if (*dm_state) | | ~~~~~~~~~~ | | || | | |(15) 'dm_state' is NULL | | (16) following 'false' branch... |...... | 3298 | priv_state = drm_atomic_get_private_obj_state(state, &dm->atomic_obj); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here | 3299 | if (IS_ERR(priv_state)) | | ~ | | | | | (18) following 'true' branch... | 'dm_atomic_get_state': event 19 | |include/linux/err.h:31:16: | 31 | return (long) ptr; | | ^~~~~~~~~~ | | | | | (19) ...to here | <------+ | 'dm_update_plane_state': events 20-24 | |drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:9959:23: | 9959 | ret = dm_atomic_get_state(state, &dm_state); | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (20) returning to 'dm_update_plane_state' from 'dm_atomic_get_state' | 9960 | if (ret) | | ~ | | | | | (21) following 'false' branch (when 'ret == 0')... |...... | 9963 | if (!dc_remove_plane_from_context( | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (22) ...to here | | (24) dereference of NULL 'dm_state' | 9964 | dc, | | ~~~ | 9965 | dm_old_crtc_state->stream, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | 9966 | dm_old_plane_state->dc_state, | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 9967 | dm_state->context)) { | | ~~~~~~~~~~~~~~~~~~ | | | | | (23) 'dm_state' is NULL | drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c: In function 'dm_edid_parser_send_cea': >> drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:10578:9: >> warning: use of NULL 'data' where non-null expected [CWE-476] >> [-Wanalyzer-null-argument] 10578 | memcpy(input->payload, data, length); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'parse_hdmi_amd_vsdb': events 1-2 | |10678 | static int parse_hdmi_amd_vsdb(struct amdgpu_dm_connector *aconnector, | | ^~~~~~~~~~~~~~~~~~~ | | | | | (1) entry to 'parse_hdmi_amd_vsdb' |...... |10687 | if (edid == NULL || edid->extensions == 0) | | ~ | | | | | (2) following 'false' branch... | 'parse_hdmi_amd_vsdb': event 3 | |cc1: | (3): ...to here | 'parse_hdmi_amd_vsdb': events 4-10 | |10691 | for (i = 0; i < edid->extensions; i++) { | | ~~^~~~~~~~~~~~~~~~~~ | | | | | (4) following 'false' branch... |...... |10697 | if (i == edid->extensions) | | ~ | | | | | (5) ...to here | | (6) following 'false' branch... |...... |10701 | if (edid_ext[0] != CEA_EXT) | | ~~~~~~~~~~~~ | | | | | | | (7) ...to here | | (8) following 'false' branch... |...... |10704 | valid_vsdb_found = parse_edid_cea(aconnector, edid_ext, EDID_LENGTH, vsdb_info); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (9) ...to here | | (10) calling 'parse_edid_cea' from 'parse_hdmi_amd_vsdb' | +--> 'parse_edid_cea': events 11-14 | |10666 | static bool parse_edid_cea(struct amdgpu_dm_connector *aconnector, | | ^~~~~~~~~~~~~~ | | | | | (11) entry to 'parse_edid_cea' |...... |10672 | if (adev->dm.dmub_srv) | | ~ | | | | | (12) following 'true' branch... |10673 | return parse_edid_cea_dmub(&adev->dm, edid_ext, len, vsdb_info); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (13) ...to here | | (14) calling 'parse_edid_cea_dmub' from 'parse_edid_cea' | +--> 'parse_edid_cea_dmub': events 15-20 | |10650 | static bool parse_edid_cea_dmub(struct amdgpu_display_manager *dm, | | ^~~~~~~~~~~~~~~~~~~ | | | | | (15) entry to 'parse_edid_cea_dmub' |...... |10657 | for (i = 0; i < len; i += 8) { | | ~~~~~~~ | | | | | (16) following 'true' branch (when 'i < len')... |10658 | /* send 8 bytes a time */ |10659 | if (!dm_edid_parser_send_cea(dm, i, len, &edid_ext[i], 8, vsdb_info)) | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (17) ...to here | | (18) 'edid_ext' is NULL | | (19) 'edid_ext' is NULL | | (20) calling 'dm_edid_parser_send_cea' from 'parse_edid_cea_dmub' | +--> 'dm_edid_parser_send_cea': events 21-24 | |10552 | static bool dm_edid_parser_send_cea(struct amdgpu_display_manager *dm, | | ^~~~~~~~~~~~~~~~~~~~~~~ | | | | | (21) entry to 'dm_edid_parser_send_cea' |...... |10564 | if (length > DMUB_EDID_CEA_DATA_CHUNK_BYTES) | | ~ | | | | | (22) following 'false' branch (when 'length <= 8')... |...... |10571 | cmd.edid_cea.header.type = DMUB_CMD__EDID_CEA; | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | | | | | (23) ...to here |...... |10578 | memcpy(input->payload, data, length); | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/data +10578 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c f9b4f20c4777bd Stylon Wang 2020-12-04 10551 46db138dc83ae1 Stylon Wang 2021-05-29 10552 static bool dm_edid_parser_send_cea(struct amdgpu_display_manager *dm, 46db138dc83ae1 Stylon Wang 2021-05-29 10553 unsigned int offset, 46db138dc83ae1 Stylon Wang 2021-05-29 10554 unsigned int total_length, 46db138dc83ae1 Stylon Wang 2021-05-29 10555 uint8_t *data, 46db138dc83ae1 Stylon Wang 2021-05-29 10556 unsigned int length, 46db138dc83ae1 Stylon Wang 2021-05-29 10557 struct amdgpu_hdmi_vsdb_info *vsdb) 46db138dc83ae1 Stylon Wang 2021-05-29 10558 { 46db138dc83ae1 Stylon Wang 2021-05-29 10559 bool res; 46db138dc83ae1 Stylon Wang 2021-05-29 10560 union dmub_rb_cmd cmd; 46db138dc83ae1 Stylon Wang 2021-05-29 10561 struct dmub_cmd_send_edid_cea *input; 46db138dc83ae1 Stylon Wang 2021-05-29 10562 struct dmub_cmd_edid_cea_output *output; 46db138dc83ae1 Stylon Wang 2021-05-29 10563 46db138dc83ae1 Stylon Wang 2021-05-29 10564 if (length > DMUB_EDID_CEA_DATA_CHUNK_BYTES) 46db138dc83ae1 Stylon Wang 2021-05-29 10565 return false; 46db138dc83ae1 Stylon Wang 2021-05-29 10566 46db138dc83ae1 Stylon Wang 2021-05-29 10567 memset(&cmd, 0, sizeof(cmd)); 46db138dc83ae1 Stylon Wang 2021-05-29 10568 46db138dc83ae1 Stylon Wang 2021-05-29 10569 input = &cmd.edid_cea.data.input; 46db138dc83ae1 Stylon Wang 2021-05-29 10570 46db138dc83ae1 Stylon Wang 2021-05-29 10571 cmd.edid_cea.header.type = DMUB_CMD__EDID_CEA; 46db138dc83ae1 Stylon Wang 2021-05-29 10572 cmd.edid_cea.header.sub_type = 0; 46db138dc83ae1 Stylon Wang 2021-05-29 10573 cmd.edid_cea.header.payload_bytes = 46db138dc83ae1 Stylon Wang 2021-05-29 10574 sizeof(cmd.edid_cea) - sizeof(cmd.edid_cea.header); 46db138dc83ae1 Stylon Wang 2021-05-29 10575 input->offset = offset; 46db138dc83ae1 Stylon Wang 2021-05-29 10576 input->length = length; 46db138dc83ae1 Stylon Wang 2021-05-29 10577 input->total_length = total_length; 46db138dc83ae1 Stylon Wang 2021-05-29 @10578 memcpy(input->payload, data, length); 46db138dc83ae1 Stylon Wang 2021-05-29 10579 46db138dc83ae1 Stylon Wang 2021-05-29 10580 res = dc_dmub_srv_cmd_with_reply_data(dm->dc->ctx->dmub_srv, &cmd); 46db138dc83ae1 Stylon Wang 2021-05-29 10581 if (!res) { 46db138dc83ae1 Stylon Wang 2021-05-29 10582 DRM_ERROR("EDID CEA parser failed\n"); 46db138dc83ae1 Stylon Wang 2021-05-29 10583 return false; 46db138dc83ae1 Stylon Wang 2021-05-29 10584 } 46db138dc83ae1 Stylon Wang 2021-05-29 10585 46db138dc83ae1 Stylon Wang 2021-05-29 10586 output = &cmd.edid_cea.data.output; 46db138dc83ae1 Stylon Wang 2021-05-29 10587 46db138dc83ae1 Stylon Wang 2021-05-29 10588 if (output->type == DMUB_CMD__EDID_CEA_ACK) { 46db138dc83ae1 Stylon Wang 2021-05-29 10589 if (!output->ack.success) { 46db138dc83ae1 Stylon Wang 2021-05-29 10590 DRM_ERROR("EDID CEA ack failed at offset %d\n", 46db138dc83ae1 Stylon Wang 2021-05-29 10591 output->ack.offset); 46db138dc83ae1 Stylon Wang 2021-05-29 10592 } 46db138dc83ae1 Stylon Wang 2021-05-29 10593 } else if (output->type == DMUB_CMD__EDID_CEA_AMD_VSDB) { 46db138dc83ae1 Stylon Wang 2021-05-29 10594 if (!output->amd_vsdb.vsdb_found) 46db138dc83ae1 Stylon Wang 2021-05-29 10595 return false; 46db138dc83ae1 Stylon Wang 2021-05-29 10596 46db138dc83ae1 Stylon Wang 2021-05-29 10597 vsdb->freesync_supported = output->amd_vsdb.freesync_supported; 46db138dc83ae1 Stylon Wang 2021-05-29 10598 vsdb->amd_vsdb_version = output->amd_vsdb.amd_vsdb_version; 46db138dc83ae1 Stylon Wang 2021-05-29 10599 vsdb->min_refresh_rate_hz = output->amd_vsdb.min_frame_rate; 46db138dc83ae1 Stylon Wang 2021-05-29 10600 vsdb->max_refresh_rate_hz = output->amd_vsdb.max_frame_rate; 46db138dc83ae1 Stylon Wang 2021-05-29 10601 } else { 46db138dc83ae1 Stylon Wang 2021-05-29 10602 DRM_ERROR("Unknown EDID CEA parser results\n"); 46db138dc83ae1 Stylon Wang 2021-05-29 10603 return false; 46db138dc83ae1 Stylon Wang 2021-05-29 10604 } 46db138dc83ae1 Stylon Wang 2021-05-29 10605 46db138dc83ae1 Stylon Wang 2021-05-29 10606 return true; 46db138dc83ae1 Stylon Wang 2021-05-29 10607 } 46db138dc83ae1 Stylon Wang 2021-05-29 10608 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
