drm/amd/pp: Fix potential NULL pointer dereference in atomctrl_initialize_mc_reg_table
[ Upstream commit 820116a39f96bdc7d426c33a804b52f53700a919 ] 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:b3892e2bb5
("drm/amd/pp: Use atombios api directly in powerplay (v2)") Fixes:5f92b48cf6
("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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
079cc1fa46
commit
cdf7e1ff99
@@ -144,6 +144,10 @@ int atomctrl_initialize_mc_reg_table(
|
|||||||
vram_info = (ATOM_VRAM_INFO_HEADER_V2_1 *)
|
vram_info = (ATOM_VRAM_INFO_HEADER_V2_1 *)
|
||||||
smu_atom_get_data_table(hwmgr->adev,
|
smu_atom_get_data_table(hwmgr->adev,
|
||||||
GetIndexIntoMasterTable(DATA, VRAM_Info), &size, &frev, &crev);
|
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) {
|
if (module_index >= vram_info->ucNumOfVRAMModule) {
|
||||||
pr_err("Invalid VramInfo table.");
|
pr_err("Invalid VramInfo table.");
|
||||||
@@ -181,6 +185,10 @@ int atomctrl_initialize_mc_reg_table_v2_2(
|
|||||||
vram_info = (ATOM_VRAM_INFO_HEADER_V2_2 *)
|
vram_info = (ATOM_VRAM_INFO_HEADER_V2_2 *)
|
||||||
smu_atom_get_data_table(hwmgr->adev,
|
smu_atom_get_data_table(hwmgr->adev,
|
||||||
GetIndexIntoMasterTable(DATA, VRAM_Info), &size, &frev, &crev);
|
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) {
|
if (module_index >= vram_info->ucNumOfVRAMModule) {
|
||||||
pr_err("Invalid VramInfo table.");
|
pr_err("Invalid VramInfo table.");
|
||||||
|
Reference in New Issue
Block a user