xorg-x11-server-Xwayland/0027-glx-Set-ContextTag-for-all-contexts.patch
Olivier Fourdan c3efb5274d Fix a use-after-free in the previous changes for GLX
Related: rhbz#1969486
2021-06-21 17:06:57 +02:00

46 lines
1.5 KiB
Diff

From 1607ac6870f7cf67c30b96529ea5ca389c771a3d Mon Sep 17 00:00:00 2001
From: Olivier Fourdan <ofourdan@redhat.com>
Date: Thu, 3 Jun 2021 17:51:01 +0200
Subject: [PATCH xserver 27/27] glx: Set ContextTag for all contexts
Currently, xorgGlxMakeCurrent() would set the context tag only for
indirect GLX contexts.
However, several other places expect to find a context for the tag or
they would raise a GLXBadContextTag error, such as WaitGL() or WaitX().
Set the context tag for direct contexts as well, to avoid raising an
error and possibly killing the client and set currentClient.
Thanks to Erik Kurzinger <ekurzinger@nvidia.com> for spotting the issue.
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit c468d34c7208c9041f9c077b54a00ae9cccad6a3)
(cherry picked from commit aad61e8e03311eb8bae4f7db59e65634733eadc2)
---
glx/glxcmds.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 1b9ad6d14..8b2170306 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -662,10 +662,11 @@ xorgGlxMakeCurrent(ClientPtr client, GLXContextTag tag, XID drawId, XID readId,
glxc->readPriv = NULL;
return __glXError(GLXBadContext);
}
+ }
+ glxServer.setContextTagPrivate(client, newContextTag, glxc);
+ if (glxc)
glxc->currentClient = client;
- glxServer.setContextTagPrivate(client, newContextTag, glxc);
- }
if (prevglxc) {
prevglxc->currentClient = NULL;
--
2.31.1