[PATCH v2 02/10] drm/uapi: Validate the mode flags/type

Alex Deucher alexdeucher at gmail.com
Wed Nov 15 17:38:06 UTC 2017


On Wed, Nov 15, 2017 at 10:49 AM, Ville Syrjala
<ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> 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 <chris at chris-wilson.co.uk>
> Cc: Jose Abreu <Jose.Abreu at synopsys.com>
> Cc: Adam Jackson <ajax at redhat.com>
> Cc: Keith Packard <keithp at keithp.com>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Reviewed-by: Adam Jackson <ajax at redhat.com>

Reviewed-by: Alex Deucher <alexander.deucher at amd.com>

> ---
>  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 at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list