Re: [PATCH v2 02/10] drm/uapi: Validate the mode flags/type
On Wed, Nov 15, 2017 at 06:02:59PM +, Jose Abreu wrote: > Hi Ville, > > On 15-11-2017 15:49, Ville Syrjala wrote: > > > > +#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ > > +DRM_MODE_FLAG_NHSYNC | \ > > +DRM_MODE_FLAG_PVSYNC | \ > > +DRM_MODE_FLAG_NVSYNC | \ > > +DRM_MODE_FLAG_INTERLACE | \ > > +DRM_MODE_FLAG_DBLSCAN |\ > > +DRM_MODE_FLAG_CSYNC | \ > > +DRM_MODE_FLAG_PCSYNC | \ > > +DRM_MODE_FLAG_NCSYNC | \ > > +DRM_MODE_FLAG_HSKEW | \ > > +DRM_MODE_FLAG_BCAST | \ > > +DRM_MODE_FLAG_PIXMUX | \ > > +DRM_MODE_FLAG_DBLCLK | \ > > +DRM_MODE_FLAG_CLKDIV2 |\ > > +DRM_MODE_FLAG_3D_MASK) > > + > > > > I see this doesn't include the picture aspect ratio flags. > Shouldn't we add this now so that userspace can start using them? Not until we have the client cap to keep them hidden from userspace that isn't prepared to see them. -- Ville Syrjälä Intel OTC ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v2 02/10] drm/uapi: Validate the mode flags/type
Hi Ville, On 15-11-2017 15:49, Ville Syrjala wrote: > > +#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ > + DRM_MODE_FLAG_NHSYNC | \ > + DRM_MODE_FLAG_PVSYNC | \ > + DRM_MODE_FLAG_NVSYNC | \ > + DRM_MODE_FLAG_INTERLACE | \ > + DRM_MODE_FLAG_DBLSCAN |\ > + DRM_MODE_FLAG_CSYNC | \ > + DRM_MODE_FLAG_PCSYNC | \ > + DRM_MODE_FLAG_NCSYNC | \ > + DRM_MODE_FLAG_HSKEW | \ > + DRM_MODE_FLAG_BCAST | \ > + DRM_MODE_FLAG_PIXMUX | \ > + DRM_MODE_FLAG_DBLCLK | \ > + DRM_MODE_FLAG_CLKDIV2 |\ > + DRM_MODE_FLAG_3D_MASK) > + > I see this doesn't include the picture aspect ratio flags. Shouldn't we add this now so that userspace can start using them? Best Regards, Jose Miguel Abreu ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH v2 02/10] drm/uapi: Validate the mode flags/type
On Wed, Nov 15, 2017 at 10:49 AM, Ville Syrjalawrote: > From: Ville Syrjälä > > Currently userspace is allowed to feed in any king of garbage in the > high bits of the mode flags/type, as are drivers when probing modes. > Reject any mode with bogus flags/type. > > Hopefully this won't break any current userspace... > > v2: Split the type and flags checks to separates ifs (Chris) > > Cc: Chris Wilson > Cc: Jose Abreu > Cc: Adam Jackson > Cc: Keith Packard > Signed-off-by: Ville Syrjälä > Reviewed-by: Adam Jackson Reviewed-by: Alex Deucher > --- > drivers/gpu/drm/drm_modes.c | 6 ++ > include/uapi/drm/drm_mode.h | 24 > 2 files changed, 30 insertions(+) > > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c > index 1a72883b836e..34b5123ebfc0 100644 > --- a/drivers/gpu/drm/drm_modes.c > +++ b/drivers/gpu/drm/drm_modes.c > @@ -1036,6 +1036,12 @@ EXPORT_SYMBOL(drm_mode_equal_no_clocks_no_stereo); > enum drm_mode_status > drm_mode_validate_basic(const struct drm_display_mode *mode) > { > + if (mode->type & ~DRM_MODE_TYPE_ALL) > + return MODE_BAD; > + > + if (mode->flags & ~DRM_MODE_FLAG_ALL) > + return MODE_BAD; > + > if ((mode->flags & DRM_MODE_FLAG_3D_MASK) > DRM_MODE_FLAG_3D_MAX) > return MODE_BAD; > > diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h > index 5597a87154e5..004db470b477 100644 > --- a/include/uapi/drm/drm_mode.h > +++ b/include/uapi/drm/drm_mode.h > @@ -46,6 +46,14 @@ extern "C" { > #define DRM_MODE_TYPE_USERDEF (1<<5) > #define DRM_MODE_TYPE_DRIVER (1<<6) > > +#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_BUILTIN |\ > +DRM_MODE_TYPE_CLOCK_C |\ > +DRM_MODE_TYPE_CRTC_C | \ > +DRM_MODE_TYPE_PREFERRED | \ > +DRM_MODE_TYPE_DEFAULT |\ > +DRM_MODE_TYPE_USERDEF |\ > +DRM_MODE_TYPE_DRIVER) > + > /* Video mode flags */ > /* bit compatible with the xrandr RR_ definitions (bits 0-13) > * > @@ -99,6 +107,22 @@ extern "C" { > #define DRM_MODE_FLAG_PIC_AR_16_9 \ > (DRM_MODE_PICTURE_ASPECT_16_9<<19) > > +#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ > +DRM_MODE_FLAG_NHSYNC | \ > +DRM_MODE_FLAG_PVSYNC | \ > +DRM_MODE_FLAG_NVSYNC | \ > +DRM_MODE_FLAG_INTERLACE | \ > +DRM_MODE_FLAG_DBLSCAN |\ > +DRM_MODE_FLAG_CSYNC | \ > +DRM_MODE_FLAG_PCSYNC | \ > +DRM_MODE_FLAG_NCSYNC | \ > +DRM_MODE_FLAG_HSKEW | \ > +DRM_MODE_FLAG_BCAST | \ > +DRM_MODE_FLAG_PIXMUX | \ > +DRM_MODE_FLAG_DBLCLK | \ > +DRM_MODE_FLAG_CLKDIV2 |\ > +DRM_MODE_FLAG_3D_MASK) > + > /* DPMS flags */ > /* bit compatible with the xorg definitions. */ > #define DRM_MODE_DPMS_ON 0 > -- > 2.13.6 > > ___ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH v2 02/10] drm/uapi: Validate the mode flags/type
From: Ville SyrjäläCurrently userspace is allowed to feed in any king of garbage in the high bits of the mode flags/type, as are drivers when probing modes. Reject any mode with bogus flags/type. Hopefully this won't break any current userspace... v2: Split the type and flags checks to separates ifs (Chris) Cc: Chris Wilson Cc: Jose Abreu Cc: Adam Jackson Cc: Keith Packard Signed-off-by: Ville Syrjälä Reviewed-by: Adam Jackson --- drivers/gpu/drm/drm_modes.c | 6 ++ include/uapi/drm/drm_mode.h | 24 2 files changed, 30 insertions(+) diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index 1a72883b836e..34b5123ebfc0 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -1036,6 +1036,12 @@ EXPORT_SYMBOL(drm_mode_equal_no_clocks_no_stereo); enum drm_mode_status drm_mode_validate_basic(const struct drm_display_mode *mode) { + if (mode->type & ~DRM_MODE_TYPE_ALL) + return MODE_BAD; + + if (mode->flags & ~DRM_MODE_FLAG_ALL) + return MODE_BAD; + if ((mode->flags & DRM_MODE_FLAG_3D_MASK) > DRM_MODE_FLAG_3D_MAX) return MODE_BAD; diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h index 5597a87154e5..004db470b477 100644 --- a/include/uapi/drm/drm_mode.h +++ b/include/uapi/drm/drm_mode.h @@ -46,6 +46,14 @@ extern "C" { #define DRM_MODE_TYPE_USERDEF (1<<5) #define DRM_MODE_TYPE_DRIVER (1<<6) +#define DRM_MODE_TYPE_ALL (DRM_MODE_TYPE_BUILTIN |\ +DRM_MODE_TYPE_CLOCK_C |\ +DRM_MODE_TYPE_CRTC_C | \ +DRM_MODE_TYPE_PREFERRED | \ +DRM_MODE_TYPE_DEFAULT |\ +DRM_MODE_TYPE_USERDEF |\ +DRM_MODE_TYPE_DRIVER) + /* Video mode flags */ /* bit compatible with the xrandr RR_ definitions (bits 0-13) * @@ -99,6 +107,22 @@ extern "C" { #define DRM_MODE_FLAG_PIC_AR_16_9 \ (DRM_MODE_PICTURE_ASPECT_16_9<<19) +#define DRM_MODE_FLAG_ALL (DRM_MODE_FLAG_PHSYNC | \ +DRM_MODE_FLAG_NHSYNC | \ +DRM_MODE_FLAG_PVSYNC | \ +DRM_MODE_FLAG_NVSYNC | \ +DRM_MODE_FLAG_INTERLACE | \ +DRM_MODE_FLAG_DBLSCAN |\ +DRM_MODE_FLAG_CSYNC | \ +DRM_MODE_FLAG_PCSYNC | \ +DRM_MODE_FLAG_NCSYNC | \ +DRM_MODE_FLAG_HSKEW | \ +DRM_MODE_FLAG_BCAST | \ +DRM_MODE_FLAG_PIXMUX | \ +DRM_MODE_FLAG_DBLCLK | \ +DRM_MODE_FLAG_CLKDIV2 |\ +DRM_MODE_FLAG_3D_MASK) + /* DPMS flags */ /* bit compatible with the xorg definitions. */ #define DRM_MODE_DPMS_ON 0 -- 2.13.6 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel