Commit b04c6217 authored by Hersen Wu's avatar Hersen Wu Committed by Chen Jun
Browse files

drm/amd/display: Add NULL pointer check for kzalloc

mainline inclusion
from mainline-v6.10-rc1
commit 8e65a1b7118acf6af96449e1e66b7adbc9396912
category: bugfix
bugzilla: https://gitee.com/src-openeuler/kernel/issues/IAGSKH
CVE: CVE-2024-42122

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8e65a1b7118acf6af96449e1e66b7adbc9396912



--------------------------------

[Why & How]
Check return pointer of kzalloc before using it.

Reviewed-by: default avatarAlex Hung <alex.hung@amd.com>
Acked-by: default avatarWayne Lin <wayne.lin@amd.com>
Signed-off-by: default avatarHersen Wu <hersenxs.wu@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Conflicts:
	drivers/gpu/drm/amd/display/dc/resource/dcn30/dcn30_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn315/dcn315_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn316/dcn316_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn32/dcn32_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn321/dcn321_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c
	drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c
	drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c
	drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c
	drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c
	drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c
	drivers/gpu/drm/amd/display/dc/dcn316/dcn316_resource.c
	drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c
	drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c
[Fix context conflicts]
Signed-off-by: default avatarChen Jun <chenjun102@huawei.com>
parent e7bc7968
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -560,11 +560,19 @@ void dcn3_clk_mgr_construct(
	dce_clock_read_ss_info(clk_mgr);

	clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
	if (!clk_mgr->base.bw_params) {
		BREAK_TO_DEBUGGER();
		return;
	}

	/* need physical address of table to give to PMFW */
	clk_mgr->wm_range_table = dm_helpers_allocate_gpu_mem(clk_mgr->base.ctx,
			DC_MEM_ALLOC_TYPE_GART, sizeof(WatermarksExternal_t),
			&clk_mgr->wm_range_table_addr);
	if (!clk_mgr->wm_range_table) {
		BREAK_TO_DEBUGGER();
		return;
	}
}

void dcn3_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr)
+8 −0
Original line number Diff line number Diff line
@@ -1022,11 +1022,19 @@ void dcn32_clk_mgr_construct(
	clk_mgr->smu_present = false;

	clk_mgr->base.bw_params = kzalloc(sizeof(*clk_mgr->base.bw_params), GFP_KERNEL);
	if (!clk_mgr->base.bw_params) {
		BREAK_TO_DEBUGGER();
		return;
	}

	/* need physical address of table to give to PMFW */
	clk_mgr->wm_range_table = dm_helpers_allocate_gpu_mem(clk_mgr->base.ctx,
			DC_MEM_ALLOC_TYPE_GART, sizeof(WatermarksExternal_t),
			&clk_mgr->wm_range_table_addr);
	if (!clk_mgr->wm_range_table) {
		BREAK_TO_DEBUGGER();
		return;
	}
}

void dcn32_clk_mgr_destroy(struct clk_mgr_internal *clk_mgr)
+3 −0
Original line number Diff line number Diff line
@@ -2045,6 +2045,9 @@ bool dcn30_validate_bandwidth(struct dc *dc,

	BW_VAL_TRACE_COUNT();

	if (!pipes)
		goto validate_fail;

	DC_FP_START();
	out = dcn30_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate, true);
	DC_FP_END();
+5 −0
Original line number Diff line number Diff line
@@ -1308,6 +1308,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(

	/* allocate HPO link encoder */
	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
	if (!hpo_dp_enc31)
		return NULL; /* out of memory */

	hpo_dp_link_encoder31_construct(hpo_dp_enc31, ctx, inst,
					&hpo_dp_link_enc_regs[inst],
@@ -1764,6 +1766,9 @@ bool dcn31_validate_bandwidth(struct dc *dc,

	BW_VAL_TRACE_COUNT();

	if (!pipes)
		goto validate_fail;

	DC_FP_START();
	out = dcn30_internal_validate_bw(dc, context, pipes, &pipe_cnt, &vlevel, fast_validate, true);
	DC_FP_END();
+5 −0
Original line number Diff line number Diff line
@@ -1381,6 +1381,8 @@ static struct hpo_dp_link_encoder *dcn31_hpo_dp_link_encoder_create(

	/* allocate HPO link encoder */
	hpo_dp_enc31 = kzalloc(sizeof(struct dcn31_hpo_dp_link_encoder), GFP_KERNEL);
	if (!hpo_dp_enc31)
		return NULL; /* out of memory */

	hpo_dp_link_encoder31_construct(hpo_dp_enc31, ctx, inst,
					&hpo_dp_link_enc_regs[inst],
@@ -1741,6 +1743,9 @@ bool dcn314_validate_bandwidth(struct dc *dc,

	BW_VAL_TRACE_COUNT();

	if (!pipes)
		goto validate_fail;

	if (filter_modes_for_single_channel_workaround(dc, context))
		goto validate_fail;

Loading