[Mesa-dev] [Mesa-stable] [PATCH] glx: Properly handle cases where screen creation fails

Emil Velikov emil.l.velikov at gmail.com
Wed Feb 21 14:41:49 UTC 2018


On 21 February 2018 at 14:26, Chuck Atkins <chuck.atkins at kitware.com> wrote:
> This fixes a segfault exposed by a29d63ecf7 which occurs when swr is
> used on an unsupported architecture.
>
> Signed-off-by: Chuck Atkins <chuck.atkins at kitware.com>
> Cc: mesa-stable at lists.freedesktop.org
> Cc: George Kyriazis <george.kyriazis at intel.com>
> Cc: Bruce Cherniak <bruce.cherniak at intel.com>
> ---
>  src/gallium/state_trackers/glx/xlib/xm_api.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/state_trackers/glx/xlib/xm_api.c b/src/gallium/state_trackers/glx/xlib/xm_api.c
> index 934c0aba11..3aec57e85d 100644
> --- a/src/gallium/state_trackers/glx/xlib/xm_api.c
> +++ b/src/gallium/state_trackers/glx/xlib/xm_api.c
> @@ -182,9 +182,12 @@ xmesa_close_display(Display *display)
>      * }
>      */
>
> -   if (xmdpy->smapi->destroy)
> -      xmdpy->smapi->destroy(xmdpy->smapi);
> -   free(xmdpy->smapi);
> +   if (xmdpy->smapi)
> +   {
> +      if (xmdpy->smapi->destroy)
> +         xmdpy->smapi->destroy(xmdpy->smapi);
> +      free(xmdpy->smapi);
> +   }
>
>     XFree((char *) info);
>  }
> @@ -767,7 +770,7 @@ XMesaVisual XMesaCreateVisual( Display *display,
>     XMesaVisual v;
>     GLint red_bits, green_bits, blue_bits, alpha_bits;
>
> -   if (!xmdpy)
> +   if (!xmdpy || !xmdpy->screen)
>        return NULL;
>
Something doesn't look quite right - it seems that xmesa_init_display
should be fixed instead.

Currently it returns non-NULL when either of the following fail:
 - driver.create_pipe_screen()
 - CALLOC_STRUCT

I would add an explicit check after those + goto err_path.
The latter of which doing some proper teardown. Note: that there's a
leak in there - one should walk, detach & free the new entry from the
MesaExtInfo list.

-Emil


More information about the mesa-dev mailing list