diff options
author | Jonas Karlman <jonas@kwiboo.se> | 2023-06-21 22:33:21 +0000 |
---|---|---|
committer | Heiko Stuebner <heiko@sntech.de> | 2023-08-12 23:53:36 +0200 |
commit | 342f7e4967d02b0ec263b15916304fc54841b608 (patch) | |
tree | d54a86b0948ad4d8a53a3cb107548282a3a3a12b /drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | |
parent | 5aacd290837828c089a83ac9795c74c4c9e2c923 (diff) | |
download | linux-stable-342f7e4967d02b0ec263b15916304fc54841b608.tar.gz linux-stable-342f7e4967d02b0ec263b15916304fc54841b608.tar.bz2 linux-stable-342f7e4967d02b0ec263b15916304fc54841b608.zip |
drm/rockchip: vop2: Don't crash for invalid duplicate_state
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
Diffstat (limited to 'drivers/gpu/drm/rockchip/rockchip_drm_vop2.c')
-rw-r--r-- | drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c index 583df4d22f7e..d843c19c146d 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c @@ -2098,11 +2098,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; |