]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/amd/pp: Fix potential NULL pointer dereference in atomctrl_initialize_mc_reg_table
authorCharles Han <hanchunchao@inspur.com>
Thu, 27 Mar 2025 04:04:35 +0000 (12:04 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Mon, 7 Apr 2025 19:18:58 +0000 (15:18 -0400)
The function atomctrl_initialize_mc_reg_table() and
atomctrl_initialize_mc_reg_table_v2_2() does not check the return
value of smu_atom_get_data_table(). If smu_atom_get_data_table()
fails to retrieve vram_info, it returns NULL which is later
dereferenced.

Fixes: b3892e2bb519 ("drm/amd/pp: Use atombios api directly in powerplay (v2)")
Fixes: 5f92b48cf62c ("drm/amd/pm: add mc register table initialization")
Signed-off-by: Charles Han <hanchunchao@inspur.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/pm/powerplay/hwmgr/ppatomctrl.c

index 4bd92fd782be6abe754e3d487935b4fcedd44faa..8d40ed0f0e8383ee856b946a9a5106ec0dad9de7 100644 (file)
@@ -143,6 +143,10 @@ int atomctrl_initialize_mc_reg_table(
        vram_info = (ATOM_VRAM_INFO_HEADER_V2_1 *)
                smu_atom_get_data_table(hwmgr->adev,
                                GetIndexIntoMasterTable(DATA, VRAM_Info), &size, &frev, &crev);
+       if (!vram_info) {
+               pr_err("Could not retrieve the VramInfo table!");
+               return -EINVAL;
+       }
 
        if (module_index >= vram_info->ucNumOfVRAMModule) {
                pr_err("Invalid VramInfo table.");
@@ -180,6 +184,10 @@ int atomctrl_initialize_mc_reg_table_v2_2(
        vram_info = (ATOM_VRAM_INFO_HEADER_V2_2 *)
                smu_atom_get_data_table(hwmgr->adev,
                                GetIndexIntoMasterTable(DATA, VRAM_Info), &size, &frev, &crev);
+       if (!vram_info) {
+               pr_err("Could not retrieve the VramInfo table!");
+               return -EINVAL;
+       }
 
        if (module_index >= vram_info->ucNumOfVRAMModule) {
                pr_err("Invalid VramInfo table.");