Commit d134c5ff authored by Maxime Ripard's avatar Maxime Ripard

drm/vc4: kms: Clear the HVS FIFO commit pointer once done

Commit 9ec03d7f ("drm/vc4: kms: Wait on previous FIFO users before a
commit") introduced a wait on the previous commit done on a given HVS
FIFO.

However, we never cleared that pointer once done. Since
drm_crtc_commit_put can free the drm_crtc_commit structure directly if
we were the last user, this means that it can lead to a use-after free
if we were to duplicate the state, and that stale pointer would even be
copied to the new state.

Set the pointer to NULL once we're done with the wait so that we don't
carry over a pointer to a free'd structure.

Fixes: 9ec03d7f ("drm/vc4: kms: Wait on previous FIFO users before a commit")
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Reviewed-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
Tested-by: default avatarJian-Hong Pan <jhp@endlessos.org>
Link: https://lore.kernel.org/r/20211117094527.146275-5-maxime@cerno.tech
parent 049cfff8
...@@ -379,6 +379,7 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state) ...@@ -379,6 +379,7 @@ static void vc4_atomic_commit_tail(struct drm_atomic_state *state)
drm_err(dev, "Timed out waiting for commit\n"); drm_err(dev, "Timed out waiting for commit\n");
drm_crtc_commit_put(commit); drm_crtc_commit_put(commit);
old_hvs_state->fifo_state[channel].pending_commit = NULL;
} }
if (vc4->hvs->hvs5) if (vc4->hvs->hvs5)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment