mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-19 10:57:01 +07:00
drm/uapi: Validate the mode flags/type
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@chris-wilson.co.uk> Cc: Jose Abreu <Jose.Abreu@synopsys.com> Cc: Adam Jackson <ajax@redhat.com> Cc: Keith Packard <keithp@keithp.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Adam Jackson <ajax@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20171115154913.23827-1-ville.syrjala@linux.intel.com Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
064a3e6e8e
commit
c6ed6dad5c
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user