diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/5576-drm-amd-display-fix-bug-of-accessing-invalid-memory.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/5576-drm-amd-display-fix-bug-of-accessing-invalid-memory.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/5576-drm-amd-display-fix-bug-of-accessing-invalid-memory.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/5576-drm-amd-display-fix-bug-of-accessing-invalid-memory.patch new file mode 100644 index 00000000..5528f1b6 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/5576-drm-amd-display-fix-bug-of-accessing-invalid-memory.patch @@ -0,0 +1,55 @@ +From 558a81423955eb43a8e73ad01e46d0fee589c44b Mon Sep 17 00:00:00 2001 +From: Su Sung Chung <Su.Chung@amd.com> +Date: Thu, 20 Sep 2018 15:03:27 -0400 +Subject: [PATCH 5576/5725] drm/amd/display: fix bug of accessing invalid + memory + +[Why] +A loop inside of build_evenly_distributed_points function that traverse through +the array of points become an infinite loop when m_GammaUpdates does not +get assigned to any value. + +[How] +In DMColor, clear m_gammaIsValid bit just before writting all Zeromem for +m_GammaUpdates, to prevent calling build_evenly_distributed_points +before m_GammaUpdates gets assigned to some value. + +Signed-off-by: Su Sung Chung <Su.Chung@amd.com> +Reviewed-by: Aric Cyr <Aric.Cyr@amd.com> +Acked-by: Bhawanpreet Lakha <Bhawanpreet.Lakha@amd.com> +--- + drivers/gpu/drm/amd/display/modules/color/color_gamma.c | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c +index 0fe9882..16f7ea8 100644 +--- a/drivers/gpu/drm/amd/display/modules/color/color_gamma.c ++++ b/drivers/gpu/drm/amd/display/modules/color/color_gamma.c +@@ -1071,10 +1071,14 @@ static void build_evenly_distributed_points( + struct dividers dividers) + { + struct gamma_pixel *p = points; +- struct gamma_pixel *p_last = p + numberof_points - 1; ++ struct gamma_pixel *p_last; + + uint32_t i = 0; + ++ // This function should not gets called with 0 as a parameter ++ ASSERT(numberof_points > 0); ++ p_last = p + numberof_points - 1; ++ + do { + struct fixed31_32 value = dc_fixpt_from_fraction(i, + numberof_points - 1); +@@ -1085,7 +1089,7 @@ static void build_evenly_distributed_points( + + ++p; + ++i; +- } while (i != numberof_points); ++ } while (i < numberof_points); + + p->r = dc_fixpt_div(p_last->r, dividers.divider1); + p->g = dc_fixpt_div(p_last->g, dividers.divider1); +-- +2.7.4 + |