Skip to content

Commit 3b2894c

Browse files
JustinStittkees
authored andcommitted
drm/modes: replace deprecated strncpy with strscpy_pad
`strncpy` is deprecated for use on NUL-terminated destination strings [1] and as such we should prefer more robust and less ambiguous string interfaces. We should NUL-pad as there are full struct copies happening in places: | struct drm_mode_modeinfo umode; | | ... | struct drm_property_blob *blob; | | drm_mode_convert_to_umode(&umode, mode); | blob = drm_property_create_blob(crtc->dev, | sizeof(umode), &umode); A suitable replacement is `strscpy_pad` due to the fact that it guarantees both NUL-termination and NUL-padding on the destination buffer. Additionally, replace size macro `DRM_DISPLAY_MODE_LEN` with sizeof() to more directly tie the maximum buffer size to the destination buffer: | struct drm_display_mode { | ... | char name[DRM_DISPLAY_MODE_LEN]; Link: https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings [1] Link: KSPP#90 Cc: linux-hardening@vger.kernel.org Cc: Xu Panda <xu.panda@zte.com.cn> Signed-off-by: Justin Stitt <justinstitt@google.com> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20231016-strncpy-drivers-gpu-drm-drm_modes-c-v2-1-d0b60686e1c6@google.com Signed-off-by: Kees Cook <keescook@chromium.org>
1 parent 4464256 commit 3b2894c

1 file changed

Lines changed: 2 additions & 4 deletions

File tree

drivers/gpu/drm/drm_modes.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2617,8 +2617,7 @@ void drm_mode_convert_to_umode(struct drm_mode_modeinfo *out,
26172617
break;
26182618
}
26192619

2620-
strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
2621-
out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
2620+
strscpy_pad(out->name, in->name, sizeof(out->name));
26222621
}
26232622

26242623
/**
@@ -2659,8 +2658,7 @@ int drm_mode_convert_umode(struct drm_device *dev,
26592658
* useful for the kernel->userspace direction anyway.
26602659
*/
26612660
out->type = in->type & DRM_MODE_TYPE_ALL;
2662-
strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
2663-
out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
2661+
strscpy_pad(out->name, in->name, sizeof(out->name));
26642662

26652663
/* Clearing picture aspect ratio bits from out flags,
26662664
* as the aspect-ratio information is not stored in

0 commit comments

Comments
 (0)