Commit 23e1ce89 authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Daniel Vetter

drm: Do basic sanity checks for user modes

Currently userspace is allowed to pass in basiclly any kind of garbage
to setcrtc. Try to catch the cases where the timings make no sense
by passing the mode through drm_mode_validate_basic().

One concern here is that we now start to block some modes that have
worked in the past. It's at least possible with when using i915 with
LVDS/eDP. Previously we've just ignored everything but hdisplay/vdisplay
from the user mode and just overwritten the rest with the panel fixed
mode. So if someone has been passing a mode with just those populated
that would now stop working. If that is a real problem, we can't add
these checks to the core code and each driver would have to have its
own sanity checks. So fingers crossed...
Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent abc0b144
...@@ -2673,6 +2673,12 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, ...@@ -2673,6 +2673,12 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
goto out; goto out;
} }
mode->status = drm_mode_validate_basic(mode);
if (mode->status != MODE_OK) {
ret = -EINVAL;
goto out;
}
drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V); drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
ret = drm_crtc_check_viewport(crtc, crtc_req->x, crtc_req->y, ret = drm_crtc_check_viewport(crtc, crtc_req->x, crtc_req->y,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment