aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-5.15/950-0563-drm-vc4-kms-Fix-return-code-check.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-5.15/950-0563-drm-vc4-kms-Fix-return-code-check.patch')
-rw-r--r--target/linux/bcm27xx/patches-5.15/950-0563-drm-vc4-kms-Fix-return-code-check.patch42
1 files changed, 42 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.15/950-0563-drm-vc4-kms-Fix-return-code-check.patch b/target/linux/bcm27xx/patches-5.15/950-0563-drm-vc4-kms-Fix-return-code-check.patch
new file mode 100644
index 0000000000..2bff88c517
--- /dev/null
+++ b/target/linux/bcm27xx/patches-5.15/950-0563-drm-vc4-kms-Fix-return-code-check.patch
@@ -0,0 +1,42 @@
+From e0788eaab7b0dca567c52a5959fbdd9da942a1f5 Mon Sep 17 00:00:00 2001
+From: Maxime Ripard <maxime@cerno.tech>
+Date: Wed, 20 Oct 2021 13:31:22 +0200
+Subject: [PATCH] drm/vc4: kms: Fix return code check
+
+The HVS global state functions return an error pointer, but in most
+cases we check if it's NULL, possibly resulting in an invalid pointer
+dereference.
+
+Fixes: 9ec03d7f1ed3 ("drm/vc4: kms: Wait on previous FIFO users before a commit")
+Signed-off-by: Maxime Ripard <maxime@cerno.tech>
+---
+ drivers/gpu/drm/vc4/vc4_kms.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/vc4/vc4_kms.c
++++ b/drivers/gpu/drm/vc4/vc4_kms.c
+@@ -352,11 +352,11 @@ static void vc4_atomic_commit_tail(struc
+ int i;
+
+ old_hvs_state = vc4_hvs_get_old_global_state(state);
+- if (WARN_ON(!old_hvs_state))
++ if (WARN_ON(IS_ERR(old_hvs_state)))
+ return;
+
+ new_hvs_state = vc4_hvs_get_new_global_state(state);
+- if (WARN_ON(!new_hvs_state))
++ if (WARN_ON(IS_ERR(new_hvs_state)))
+ return;
+
+ for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
+@@ -891,8 +891,8 @@ vc4_core_clock_atomic_check(struct drm_a
+ load_state = to_vc4_load_tracker_state(priv_state);
+
+ hvs_new_state = vc4_hvs_get_global_state(state);
+- if (!hvs_new_state)
+- return -EINVAL;
++ if (IS_ERR(hvs_new_state))
++ return PTR_ERR(hvs_new_state);
+
+ for_each_oldnew_crtc_in_state(state, crtc,
+ old_crtc_state,