|
@@ -2706,8 +2706,11 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
|
|
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- /* For some reason crtc x/y offsets are signed internally. */
|
|
|
- if (crtc_req->x > INT_MAX || crtc_req->y > INT_MAX)
|
|
|
+ /*
|
|
|
+ * Universal plane src offsets are only 16.16, prevent havoc for
|
|
|
+ * drivers using universal plane code internally.
|
|
|
+ */
|
|
|
+ if (crtc_req->x & 0xffff0000 || crtc_req->y & 0xffff0000)
|
|
|
return -ERANGE;
|
|
|
|
|
|
drm_modeset_lock_all(dev);
|