diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2887-drm-amd-display-Fix-potential-mem-leak-in-DC-constru.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2887-drm-amd-display-Fix-potential-mem-leak-in-DC-constru.patch | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2887-drm-amd-display-Fix-potential-mem-leak-in-DC-constru.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2887-drm-amd-display-Fix-potential-mem-leak-in-DC-constru.patch new file mode 100644 index 00000000..7ed222a9 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2887-drm-amd-display-Fix-potential-mem-leak-in-DC-constru.patch @@ -0,0 +1,125 @@ +From ea6309fcbdb995e97c5c18869d361155b95eb5e1 Mon Sep 17 00:00:00 2001 +From: Harry Wentland <harry.wentland@amd.com> +Date: Fri, 10 Nov 2017 20:17:03 -0500 +Subject: [PATCH 2887/4131] drm/amd/display: Fix potential mem leak in DC + construct + +Found by smatch: +drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc.c:506 construct() warn: +possible memory leak of 'dc_ctx' +drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc.c:506 construct() warn: +possible memory leak of 'dc_vbios' +drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc.c:506 construct() warn: +possible memory leak of 'dcn_ip' +drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc.c:506 construct() warn: +possible memory leak of 'dcn_soc' + +Signed-off-by: Harry Wentland <harry.wentland@amd.com> +Reviewed-by: Tony Cheng <Tony.Cheng@amd.com> +Acked-by: Harry Wentland <harry.wentland@amd.com> +--- + drivers/gpu/drm/amd/display/dc/core/dc.c | 34 +++++++++++++++++--------------- + 1 file changed, 18 insertions(+), 16 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c +index f71a04a..f1467192 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c +@@ -283,19 +283,17 @@ static bool construct(struct dc *dc, + const struct dc_init_data *init_params) + { + struct dal_logger *logger; +- struct dc_context *dc_ctx = kzalloc(sizeof(*dc_ctx), GFP_KERNEL); +- struct bw_calcs_dceip *dc_dceip = kzalloc(sizeof(*dc_dceip), +- GFP_KERNEL); +- struct bw_calcs_vbios *dc_vbios = kzalloc(sizeof(*dc_vbios), +- GFP_KERNEL); ++ struct dc_context *dc_ctx; ++ struct bw_calcs_dceip *dc_dceip; ++ struct bw_calcs_vbios *dc_vbios; + #ifdef CONFIG_DRM_AMD_DC_DCN1_0 +- struct dcn_soc_bounding_box *dcn_soc = kzalloc(sizeof(*dcn_soc), +- GFP_KERNEL); +- struct dcn_ip_params *dcn_ip = kzalloc(sizeof(*dcn_ip), GFP_KERNEL); ++ struct dcn_soc_bounding_box *dcn_soc; ++ struct dcn_ip_params *dcn_ip; + #endif + + enum dce_version dc_version = DCE_VERSION_UNKNOWN; + ++ dc_dceip = kzalloc(sizeof(*dc_dceip), GFP_KERNEL); + if (!dc_dceip) { + dm_error("%s: failed to create dceip\n", __func__); + goto fail; +@@ -303,6 +301,7 @@ static bool construct(struct dc *dc, + + dc->bw_dceip = dc_dceip; + ++ dc_vbios = kzalloc(sizeof(*dc_vbios), GFP_KERNEL); + if (!dc_vbios) { + dm_error("%s: failed to create vbios\n", __func__); + goto fail; +@@ -310,6 +309,7 @@ static bool construct(struct dc *dc, + + dc->bw_vbios = dc_vbios; + #ifdef CONFIG_DRM_AMD_DC_DCN1_0 ++ dcn_soc = kzalloc(sizeof(*dcn_soc), GFP_KERNEL); + if (!dcn_soc) { + dm_error("%s: failed to create dcn_soc\n", __func__); + goto fail; +@@ -317,6 +317,7 @@ static bool construct(struct dc *dc, + + dc->dcn_soc = dcn_soc; + ++ dcn_ip = kzalloc(sizeof(*dcn_ip), GFP_KERNEL); + if (!dcn_ip) { + dm_error("%s: failed to create dcn_ip\n", __func__); + goto fail; +@@ -325,11 +326,18 @@ static bool construct(struct dc *dc, + dc->dcn_ip = dcn_ip; + #endif + ++ dc_ctx = kzalloc(sizeof(*dc_ctx), GFP_KERNEL); + if (!dc_ctx) { + dm_error("%s: failed to create ctx\n", __func__); + goto fail; + } + ++ dc_ctx->cgs_device = init_params->cgs_device; ++ dc_ctx->driver_context = init_params->driver; ++ dc_ctx->dc = dc; ++ dc_ctx->asic_id = init_params->asic_id; ++ dc->ctx = dc_ctx; ++ + dc->current_state = dc_create_state(); + + if (!dc->current_state) { +@@ -337,11 +345,6 @@ static bool construct(struct dc *dc, + goto fail; + } + +- dc_ctx->cgs_device = init_params->cgs_device; +- dc_ctx->driver_context = init_params->driver; +- dc_ctx->dc = dc; +- dc_ctx->asic_id = init_params->asic_id; +- + /* Create logger */ + logger = dal_logger_create(dc_ctx, init_params->log_mask); + +@@ -351,11 +354,10 @@ static bool construct(struct dc *dc, + goto fail; + } + dc_ctx->logger = logger; +- dc->ctx = dc_ctx; +- dc->ctx->dce_environment = init_params->dce_environment; ++ dc_ctx->dce_environment = init_params->dce_environment; + + dc_version = resource_parse_asic_id(init_params->asic_id); +- dc->ctx->dce_version = dc_version; ++ dc_ctx->dce_version = dc_version; + + #if defined(CONFIG_DRM_AMD_DC_FBC) + dc->ctx->fbc_gpu_addr = init_params->fbc_gpu_addr; +-- +2.7.4 + |