drm/rockchip: vop2: Don't crash for invalid duplicate_state
authorJonas Karlman <jonas@kwiboo.se>
Wed, 21 Jun 2023 22:33:21 +0000 (22:33 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 20 Nov 2023 10:51:58 +0000 (11:51 +0100)
[ Upstream commit 342f7e4967d02b0ec263b15916304fc54841b608 ]

It's possible for users to try to duplicate the CRTC state even when the
state doesn't exist. drm_atomic_helper_crtc_duplicate_state() (and other
users of __drm_atomic_helper_crtc_duplicate_state()) already guard this
with a WARN_ON() instead of crashing, so let's do that here too.

Fixes: 604be85547ce ("drm/rockchip: Add VOP2 driver")
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/20230621223311.2239547-5-jonas@kwiboo.se
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c

index 3c05ce0..adccb88 100644 (file)
@@ -2094,11 +2094,13 @@ static void vop2_crtc_reset(struct drm_crtc *crtc)
 
 static struct drm_crtc_state *vop2_crtc_duplicate_state(struct drm_crtc *crtc)
 {
-       struct rockchip_crtc_state *vcstate, *old_vcstate;
+       struct rockchip_crtc_state *vcstate;
 
-       old_vcstate = to_rockchip_crtc_state(crtc->state);
+       if (WARN_ON(!crtc->state))
+               return NULL;
 
-       vcstate = kmemdup(old_vcstate, sizeof(*old_vcstate), GFP_KERNEL);
+       vcstate = kmemdup(to_rockchip_crtc_state(crtc->state),
+                         sizeof(*vcstate), GFP_KERNEL);
        if (!vcstate)
                return NULL;