On 18.02.2022 12:56, Ville Syrjälä wrote:
On Fri, Feb 18, 2022 at 12:22:44PM +0100, Andrzej Hajda wrote:
On 18.02.2022 11:03, Ville Syrjala wrote:
From: Ville Syrjälä ville.syrjala@linux.intel.com
Add a variant of drm_mode_copy() that explicitly clears out the list head of the destination mode. Helpful to guarantee we don't have stack garbage left in there for on-stack modes.
Signed-off-by: Ville Syrjälä ville.syrjala@linux.intel.com
drivers/gpu/drm/drm_modes.c | 17 +++++++++++++++++ include/drm/drm_modes.h | 2 ++ 2 files changed, 19 insertions(+)
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 96b13e36293c..40d4ce4a1da4 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -892,6 +892,23 @@ void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode * } EXPORT_SYMBOL(drm_mode_copy);
+/**
- drm_mode_init - initialize the mode from another mode
- @dst: mode to overwrite
- @src: mode to copy
- Copy an existing mode into another mode, zeroing the
- list head of the destination mode. Typically used
- to guarantee the list head is not left with stack
- garbage in on-stack modes.
- */
+void drm_mode_init(struct drm_display_mode *dst, const struct drm_display_mode *src) +{
- memset(dst, 0, sizeof(*dst));
Why not just clear the list head? Or maybe poison it? It would be more cleaner.
Then we have two places that need to be updated if some other field gets introduced that needs preserving. With a full memset() we only have to care about drm_mode_copy(). Don't see much point in micro-optimizing this thing.
In such case DOC should be modified to avoid updating it "if some other field..." :)
Anyway: Reviewed-by: Andrzej Hajda andrzej.hajda@intel.com
Regards Andrzej