drm/atomic: -EACCESS for lease-denied crtc lookup
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 28 Feb 2019 14:49:10 +0000 (15:49 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 24 Apr 2019 09:31:17 +0000 (11:31 +0200)
With the previous patch drm_crtc_find will return NULL when the crtc
isn't in our lease, which will then disable the plane/connector. No
longer an issue since the lessor can't escape their lease terms
anymore, but not quite great semantics yet either.

Catch this and return -EACCES, so that at least evil test cases have a
better chance of making sure the kernel works correctly.

Reviewed-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190228144910.26488-8-daniel.vetter@ffwll.ch
drivers/gpu/drm/drm_atomic_uapi.c

index 77d16f5d4a9aa365e983734c3f9e264374666ece..428d82662dc41ede2597b133d0f3033acd8e637d 100644 (file)
@@ -539,6 +539,8 @@ static int drm_atomic_plane_set_property(struct drm_plane *plane,
 
        } else if (property == config->prop_crtc_id) {
                struct drm_crtc *crtc = drm_crtc_find(dev, file_priv, val);
+               if (val && !crtc)
+                       return -EACCES;
                return drm_atomic_set_crtc_for_plane(state, crtc);
        } else if (property == config->prop_crtc_x) {
                state->crtc_x = U642I64(val);
@@ -677,6 +679,8 @@ static int drm_atomic_connector_set_property(struct drm_connector *connector,
 
        if (property == config->prop_crtc_id) {
                struct drm_crtc *crtc = drm_crtc_find(dev, file_priv, val);
+               if (val && !crtc)
+                       return -EACCES;
                return drm_atomic_set_crtc_for_connector(state, crtc);
        } else if (property == config->dpms_property) {
                /* setting DPMS property requires special handling, which