diff options
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.patch | 60 |
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 + |