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@xxxxxxxxxxxxxxx> > > > > 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@xxxxxxxxxxxxxxx> > > --- > > 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. -- Ville Syrjälä Intel