[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