Skip to content

Commit

Permalink
drivers/amd/pm: fix a use-after-free in kv_parse_power_table
Browse files Browse the repository at this point in the history
jira LE-1907
cve CVE-2023-52469
Rebuild_History Non-Buildable kernel-4.18.0-553.16.1.el8_10
commit-author Zhipeng Lu <alexious@zju.edu.cn>
commit 28dd788

When ps allocated by kzalloc equals to NULL, kv_parse_power_table
frees adev->pm.dpm.ps that allocated before. However, after the control
flow goes through the following call chains:

kv_parse_power_table
  |-> kv_dpm_init
        |-> kv_dpm_sw_init
	      |-> kv_dpm_fini

The adev->pm.dpm.ps is used in the for loop of kv_dpm_fini after its
first free in kv_parse_power_table and causes a use-after-free bug.

Fixes: a2e73f5 ("drm/amdgpu: Add support for CIK parts")
	Signed-off-by: Zhipeng Lu <alexious@zju.edu.cn>
	Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
(cherry picked from commit 28dd788)
	Signed-off-by: Jonathan Maple <jmaple@ciq.com>
  • Loading branch information
PlaidCat committed Sep 12, 2024
1 parent 940ed87 commit 0c64e87
Showing 1 changed file with 1 addition and 3 deletions.
4 changes: 1 addition & 3 deletions drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2748,10 +2748,8 @@ static int kv_parse_power_table(struct amdgpu_device *adev)
non_clock_info = (struct _ATOM_PPLIB_NONCLOCK_INFO *)
&non_clock_info_array->nonClockInfo[non_clock_array_index];
ps = kzalloc(sizeof(struct kv_ps), GFP_KERNEL);
if (ps == NULL) {
kfree(adev->pm.dpm.ps);
if (ps == NULL)
return -ENOMEM;
}
adev->pm.dpm.ps[i].ps_priv = ps;
k = 0;
idx = (u8 *)&power_state->v2.clockInfoIndex[0];
Expand Down

0 comments on commit 0c64e87

Please sign in to comment.