[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:44:47 UTC 2018


On 21 February 2018 at 14:41, Emil Velikov <emil.l.velikov at gmail.com> wrote:
> 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.
>
As it always happens, just remembered that the classic xlib-glx
(src/mesa/drivers/x11/) might need a similar fix.

-Emil


More information about the mesa-dev mailing list