From 51416738eae1ab5c16cbaa97a4293dbc8c809b79 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 22 Oct 2019 23:43:15 +0200 Subject: [PATCH] render/egl: prevent use-after-free when destroying current surface --- render/egl.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/render/egl.c b/render/egl.c index 69fde225c..cbd92cb9e 100644 --- a/render/egl.c +++ b/render/egl.c @@ -646,5 +646,12 @@ bool wlr_egl_destroy_surface(struct wlr_egl *egl, EGLSurface surface) { if (!surface) { return true; } + if (eglGetCurrentContext() == egl->context && + eglGetCurrentSurface(EGL_DRAW) == surface) { + // Reset the current EGL surface in case it's the one we're destroying, + // otherwise the next wlr_egl_make_current call will result in a + // use-after-free. + wlr_egl_make_current(egl, NULL, NULL); + } return eglDestroySurface(egl->display, surface); }