aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/2887-drm-amd-display-Fix-potential-mem-leak-in-DC-constru.patch
diff options
context:
space:
mode:
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.patch125
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
+