aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0903-drm-amd-display-Fix-overflow-truncation-from-strncpy.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0903-drm-amd-display-Fix-overflow-truncation-from-strncpy.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0903-drm-amd-display-Fix-overflow-truncation-from-strncpy.patch60
1 files changed, 60 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0903-drm-amd-display-Fix-overflow-truncation-from-strncpy.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0903-drm-amd-display-Fix-overflow-truncation-from-strncpy.patch
new file mode 100644
index 00000000..8946bc84
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0903-drm-amd-display-Fix-overflow-truncation-from-strncpy.patch
@@ -0,0 +1,60 @@
+From e8fb0e1d4ecb3c2eefcf9dcf0421dfab108cab97 Mon Sep 17 00:00:00 2001
+From: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Date: Fri, 20 Jul 2018 10:17:29 -0400
+Subject: [PATCH 0903/2940] drm/amd/display: Fix overflow/truncation from
+ strncpy.
+
+[Why]
+
+New GCC warnings for stringop-truncation and stringop-overflow help
+catch common misuse of strncpy. This patch suppresses these warnings
+by fixing bugs identified by them.
+
+[How]
+
+Since the parameter passed for name in amdpgu_dm_create_common_mode has
+no fixed length, if the string is >= DRM_DISPLAY_MODE_LEN then
+mode->name will not be null-terminated.
+
+The truncation in fill_audio_info won't actually occur (and the string
+will be null-terminated since the buffer is initialized to zero), but
+the warning can be suppressed by using the proper buffer size.
+
+This patch fixes both issues by using the real size for the buffer and
+making use of strscpy (which always terminates).
+
+Signed-off-by: Nicholas Kazlauskas <nicholas.kazlauskas@amd.com>
+Reviewed-by: Harry Wentland <harry.wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index a2000b40a795..ad3740c5de8c 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -2717,9 +2717,9 @@ static void fill_audio_info(struct audio_info *audio_info,
+
+ cea_revision = drm_connector->display_info.cea_rev;
+
+- strncpy(audio_info->display_name,
++ strscpy(audio_info->display_name,
+ edid_caps->display_name,
+- AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS - 1);
++ AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS);
+
+ if (cea_revision >= 3) {
+ audio_info->mode_count = edid_caps->audio_mode_count;
+@@ -3859,7 +3859,7 @@ amdgpu_dm_create_common_mode(struct drm_encoder *encoder,
+ mode->hdisplay = hdisplay;
+ mode->vdisplay = vdisplay;
+ mode->type &= ~DRM_MODE_TYPE_PREFERRED;
+- strncpy(mode->name, name, DRM_DISPLAY_MODE_LEN);
++ strscpy(mode->name, name, DRM_DISPLAY_MODE_LEN);
+
+ return mode;
+ }
+--
+2.17.1
+