[Mesa-dev] [Mesa-stable] [PATCH] egl: Added NULL check in eglCreateContext

Valentin Corfu corfuvalentin at gmail.com
Wed Dec 10 07:08:01 PST 2014


On 10.12.2014 07:02, Chad Versace wrote:
> On 12/08/2014 01:45 PM, Ian Romanick wrote:
>> On 12/02/2014 12:10 AM, Valentin Corfu wrote:
>>> With this check we can avoid segmentation fault when invalid value used during eglCreateContext.
>>>
>>> Cc: mesa-stable at lists.freedesktop.org
>>> Cc: mesa-dev at lists.freedesktop.org
>>> Signed-off-by: Valentin Corfu <valentinx.corfu at intel.com>
>>> ---
>>>   src/egl/drivers/dri2/egl_dri2.c | 5 +++++
>>>   1 file changed, 5 insertions(+)
>>>
>>> diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
>>> index d795a2f..819cb77 100644
>>> --- a/src/egl/drivers/dri2/egl_dri2.c
>>> +++ b/src/egl/drivers/dri2/egl_dri2.c
>>> @@ -808,6 +808,11 @@ dri2_create_context(_EGLDriver *drv, _EGLDisplay *disp, _EGLConfig *conf,
>>>   
>>>      (void) drv;
>>>   
>>> +   if (conf == NULL) {
>>> +      _eglError(EGL_BAD_CONFIG, "dri2_create_context");
>>> +      return NULL;
>>> +   }
>>> +
>> Can't conf be NULL when used with MESA_configless_context?  See also the
>> conf != NULL check at line 853.
>>
>> Also, parameter validation etc. should go in eglCreateContext.
> NAK. I don't know Valentin is hitting a segfault. But (conf == NULL) is
> legal here. If Valentin has a backtrace, then maybe that would help us
> determine a correct fix.
>
> This same function, farther below, contains this code:
>
> src/egl/drivers/dri2/egl_dri2.c:dri2_create_context():
>      if (conf != NULL) {
>          ...
>      } else {
>          dri_config = NULL;
>      }
>
> And as Ian points out, the config is allowed to be null if EGL_MESA_configless_context
> is supported. Here's proof:
>                                                                                      
> EGLContext EGLAPIENTRY
> eglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext share_list,
>                   const EGLint *attrib_list)
> {
>     ...
>                                                                                      
>     if (!config && !disp->Extensions.MESA_configless_context)
>        RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT);
>     
>     ...
> }
>
>
>

This problem starts when I call eglCreateContext in following way into 
"simple-egl" app:
     window->egl.ctx = eglCreateContext(window->egl.dpy, NULL, NULL, 
context_attribs);

So in this way, I got a segfault into /usr/lib/dri/i965_dri.so library.
(Unfortunately, I can't provide any backtrace.)

Also, I'm using an older version (9.1.1) and into eglCreateContext 
function, RETURN_EGL_ERROR is not called.

    if (!config) {
       /* config may be NULL if surfaceless */
       if (!disp->Extensions.KHR_surfaceless_context)
          RETURN_EGL_ERROR(disp, EGL_BAD_CONFIG, EGL_NO_CONTEXT);
    }

Another appropriate fix, can be seen into commit: 
4b17dff3e5128bef67ea79d20624e878c3b48729, but not sure what really 
involves this change.

Regards,
Valentin


More information about the mesa-dev mailing list