From e46e9ee46c7dce955a94d603f4282883e826a2d5 Mon Sep 17 00:00:00 2001 From: Robert Foss Date: Thu, 9 Nov 2023 15:22:28 +0100 Subject: [PATCH] egl/surfaceless: Don't overwrire disp->Device if using EGL_DEVICE_EXT Make sure that disp->Device is never overwritten during probe function calls. If EGL_DEVICE_EXT is provided, the probing should rather fail than switch the device being used. Signed-off-by: Robert Foss Reviewed-by: Adam Jackson Part-of: --- src/egl/drivers/dri2/platform_surfaceless.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/egl/drivers/dri2/platform_surfaceless.c b/src/egl/drivers/dri2/platform_surfaceless.c index 923eb1c919a..8141a110159 100644 --- a/src/egl/drivers/dri2/platform_surfaceless.c +++ b/src/egl/drivers/dri2/platform_surfaceless.c @@ -231,6 +231,10 @@ surfaceless_probe_device(_EGLDisplay *disp, bool swrast, bool zink) if (!_eglDeviceSupports(dev_list, _EGL_DEVICE_DRM)) goto next; + if (_eglHasAttrib(disp, EGL_DEVICE_EXT) && dev_list != disp->Device) { + goto next; + } + device = _eglDeviceDrm(dev_list); assert(device); @@ -286,9 +290,15 @@ static bool surfaceless_probe_device_sw(_EGLDisplay *disp) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); + struct _egl_device *device = _eglFindDevice(dri2_dpy->fd_render_gpu, true); dri2_dpy->fd_render_gpu = -1; - disp->Device = _eglFindDevice(dri2_dpy->fd_render_gpu, true); + + if (_eglHasAttrib(disp, EGL_DEVICE_EXT) && disp->Device != device) { + return false; + } + + disp->Device = device; assert(disp->Device); dri2_dpy->driver_name = strdup(disp->Options.Zink ? "zink" : "swrast");