[Mesa-dev] [PATCH] egl: avoid eglCreatePlatform*Surface{EXT, } crash with invalid dpy

Eric Engestrom eric.engestrom at imgtec.com
Wed Aug 9 09:04:56 UTC 2017


On Tuesday, 2017-08-08 15:55:36 +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
> 
> If we have an invalid display fed into the functions, the display lookup
> will return NULL. Thus as we attempt to get the platform type, we'll
> deref. it leading to a crash.
> 
> Keep in mind that this will not happen if Mesa is built without X11 or
> when the legacy eglCreate*Surface codepaths are used.
> 
> An similar check was added with earlier commit 5e97b8f5ce9 ("egl: Fix
> crashes in eglCreate*Surface), although it was only applicable when the
> surfaceless platform is built.
> 
> Cc: mesa-stable at lists.freedesktop.org
> Cc: Tapani Pälli <tapani.palli at intel.com>
> Cc: Chad Versace <chadversary at chromium.org>
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>

Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

> ---
>  src/egl/main/eglapi.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c
> index c5e3955c48c..8146009da4f 100644
> --- a/src/egl/main/eglapi.c
> +++ b/src/egl/main/eglapi.c
> @@ -923,7 +923,7 @@ static void *
>  _fixupNativeWindow(_EGLDisplay *disp, void *native_window)
>  {
>  #ifdef HAVE_X11_PLATFORM
> -   if (disp->Platform == _EGL_PLATFORM_X11 && native_window != NULL) {
> +   if (disp && disp->Platform == _EGL_PLATFORM_X11 && native_window != NULL) {
>        /* The `native_window` parameter for the X11 platform differs between
>         * eglCreateWindowSurface() and eglCreatePlatformPixmapSurfaceEXT(). In
>         * eglCreateWindowSurface(), the type of `native_window` is an Xlib
> @@ -985,7 +985,7 @@ _fixupNativePixmap(_EGLDisplay *disp, void *native_pixmap)
>         * `Pixmap*`.  Convert `Pixmap*` to `Pixmap` because that's what
>         * dri2_x11_create_pixmap_surface() expects.
>         */
> -   if (disp->Platform == _EGL_PLATFORM_X11 && native_pixmap != NULL)
> +   if (disp && disp->Platform == _EGL_PLATFORM_X11 && native_pixmap != NULL)
>        return (void *)(* (Pixmap*) native_pixmap);
>  #endif
>     return native_pixmap;
> -- 
> 2.14.0
> 


More information about the mesa-dev mailing list