https://bugs.freedesktop.org/show_bug.cgi?id=102574
Bug ID: 102574 Summary: glDrawBuffer crashes in case of surfaceless context Product: Mesa Version: 17.1 Hardware: x86-64 (AMD64) OS: Linux (All) Status: NEW Severity: normal Priority: medium Component: Drivers/DRI/i915 Assignee: dri-devel@lists.freedesktop.org Reporter: v.vogelhuber@digitalendoscopy.de QA Contact: dri-devel@lists.freedesktop.org
I've created a surfaceless OpenGL context using the EGL_KHR_surfaceless_context extension together with eglGetPlatformDisplay/EGL_PLATFORM_GBM_MESA. In this scenario there seem to be no valid default framebuffer which is Ok, as I'm normally only render to FBOs with textures bound. Due to an error on my side I called glDrawBuffer with GL_FRONT_LEFT while no FBO was bound.
This result in a crash in intel_buffers.c because in intelDrawBuffer() dri2InvalidateDrawable is called with a null pointer which is not checked in dri2InvalidateDrawable() or anywhere before.
While the root cause for triggering the error is on my side, I think it may be better to raise an error instead of crashing. So I propose to add a check to brw->driContext->driDrawablePriv within intelDrawBuffer. Probably if the driDrawablePriv is nullptr one should not call intel_prepare_render either.
Mesa 17.1 with Kernel 4.9.6 on Intel Apollo Lake GPU