<html>
<head>
<base href="https://bugs.freedesktop.org/" />
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - vblank_mode=3 segfaults SynMark 6.1 to: intelDestroyContext() -> _mesa_meta_free() -> _mesa_make_current()"
href="https://bugs.freedesktop.org/show_bug.cgi?id=93723">93723</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>vblank_mode=3 segfaults SynMark 6.1 to: intelDestroyContext() -> _mesa_meta_free() -> _mesa_make_current()
</td>
</tr>
<tr>
<th>Product</th>
<td>Mesa
</td>
</tr>
<tr>
<th>Version</th>
<td>git
</td>
</tr>
<tr>
<th>Hardware</th>
<td>Other
</td>
</tr>
<tr>
<th>OS</th>
<td>All
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>normal
</td>
</tr>
<tr>
<th>Priority</th>
<td>medium
</td>
</tr>
<tr>
<th>Component</th>
<td>Mesa core
</td>
</tr>
<tr>
<th>Assignee</th>
<td>mesa-dev@lists.freedesktop.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>eero.t.tamminen@intel.com
</td>
</tr>
<tr>
<th>QA Contact</th>
<td>mesa-dev@lists.freedesktop.org
</td>
</tr></table>
<p>
<div>
<pre>Use case:
- vblank_mode=3 ./synmark2 OglBatch0
Result:
- Segfault in the program startup to NULL pointer access [1] within Mesa.
Notes:
- Mesa version is from today, rest is Ubuntu 15.04
- Crash happens only with EGL (v6.1) version of SynMark, not with the GLX
(v6.0) version of SynMark, so this may be EGL specific.
- Other vblank_mode values (0,1,2) work fine. With them SynMark doesn't call
eglDestroyContext() at the startup
Meta gets called from context destroy and tries to do make_current():
------------------------------------------------------
Program received signal SIGSEGV, Segmentation fault.
handle_first_current (ctx=0x7ffff7fa0038) at src/mesa/main/context.c:1620
1620 buffer = GL_BACK;
(gdb) bt
#0 handle_first_current (ctx=0x7ffff7fa0038) at src/mesa/main/context.c:1620
#1 _mesa_make_current (newCtx=newCtx@entry=0x7ffff7fa0038,
drawBuffer=drawBuffer@entry=0x0, readBuffer=readBuffer@entry=0x0)
at src/mesa/main/context.c:1745
#2 0x00007ffff221426c in _mesa_meta_free (ctx=ctx@entry=0x7ffff7fa0038) at
src/mesa/drivers/common/meta.c:440
#3 0x00007ffff2341a07 in intelDestroyContext (driContextPriv=0x8d8870) at
src/mesa/drivers/dri/i965/brw_context.c:1009
#4 0x00007ffff23267f3 in driDestroyContext (pcp=0x8d8870) at
src/mesa/drivers/dri/common/dri_util.c:478
#5 0x00007ffff6aec409 in dri2_destroy_context (drv=<optimized out>,
disp=<optimized out>, ctx=0x8da5c0)
at src/egl/drivers/dri2/egl_dri2.c:1160
#6 0x00007ffff6ae6d1f in eglDestroyContext (dpy=0x7b9280, ctx=<optimized out>)
at src/egl/main/eglapi.c:655
#7 0x00000000004e9030 in Ogl::ContextSys::ContextSys(Ogl::Ext::VersionId,
WndHandleSys const&, unsigned int, unsigned int, ApiTypes::ColorFormat,
------------------------------------------------------
[1] This crashes on access to ctx->DrawBuffer which is NULL:
------------------------------------------------------
(gdb) list
1615 * glDrawBuffers depends on the config of the first surface it is
bound to.
1616 * For GLES it is always GL_BACK which has a magic interpretation */
1617 if (!ctx->HasConfig && _mesa_is_desktop_gl(ctx)) {
1618 if (ctx->DrawBuffer != _mesa_get_incomplete_framebuffer()) {
1619 if (ctx->DrawBuffer->Visual.doubleBufferMode)
1620 buffer = GL_BACK;
1621 else
1622 buffer = GL_FRONT;
1623
1624 _mesa_drawbuffers(ctx, ctx->DrawBuffer, 1, &buffer,
(gdb) print ctx->DrawBuffer
$1 = (struct gl_framebuffer *) 0x0
(gdb) disassemble 0x7ffff206e850 , 0x7ffff206e85b
Dump of assembler code from 0x7ffff206e850 to 0x7ffff206e85b:
0x00007ffff206e850 <_mesa_make_current+704>: add %al,(%rax)
0x00007ffff206e852 <_mesa_make_current+706>: mov %rbx,%rdi
=> 0x00007ffff206e855 <_mesa_make_current+709>: cmpl $0x1,0x40(%rsi)
0x00007ffff206e859 <_mesa_make_current+713>: sbb %eax,%eax
(gdb) info registers
rax 0x7ffff2773240 140737261285952
rbx 0x7ffff7fa0038 140737353744440
rcx 0x7fffffffd9d4 140737488345556
rdx 0x1 1
rsi 0x0 0
...
------------------------------------------------------
This is how the code ends here:
------------------------------------------------------
(gdb) up
#1 _mesa_make_current (newCtx=newCtx@entry=0x7ffff7fa0038,
drawBuffer=drawBuffer@entry=0x0, readBuffer=readBuffer@entry=0x0)
at src/mesa/main/context.c:1745
1745 handle_first_current(newCtx);
(gdb) list
1744 if (newCtx->FirstTimeCurrent) {
1745 handle_first_current(newCtx);
1746 newCtx->FirstTimeCurrent = GL_FALSE;
1747 }
(gdb) up
#2 0x00007ffff221426c in _mesa_meta_free (ctx=ctx@entry=0x7ffff7fa0038) at
src/mesa/drivers/common/meta.c:440
440 _mesa_make_current(ctx, NULL, NULL);
(gdb) info locals
old_context = 0x0
(gdb) list
437 _mesa_meta_free(struct gl_context *ctx)
438 {
439 GET_CURRENT_CONTEXT(old_context);
440 _mesa_make_current(ctx, NULL, NULL);
(gdb) up
#3 0x00007ffff2341a07 in intelDestroyContext (driContextPriv=0x8d8870) at
src/mesa/drivers/dri/i965/brw_context.c:1009
1009 _mesa_meta_free(&brw->ctx);
(gdb) print *ctx
$3 = {Shared = 0x8dd370, API = API_OPENGL_COMPAT, Exec = 0x8fa680,
OutsideBeginEnd = 0x8fa680, Save = 0x900920, BeginEnd = 0x8fd7d0,
CurrentDispatch = 0x8fa680, Visual = {rgbMode = 0 '\000', floatMode = 0
'\000', doubleBufferMode = 0, stereoMode = 0,
haveAccumBuffer = 0 '\000', haveDepthBuffer = 0 '\000', haveStencilBuffer =
0 '\000', redBits = 0, greenBits = 0, blueBits = 0,
alphaBits = 0, redMask = 0, greenMask = 0, blueMask = 0, alphaMask = 0,
rgbBits = 0, indexBits = 0, accumRedBits = 0, accumGreenBits = 0,
accumBlueBits = 0, accumAlphaBits = 0, depthBits = 0, stencilBits = 0,
numAuxBuffers = 0, level = 0, visualRating = 0, transparentPixel = 0,
transparentRed = 0, transparentGreen = 0, transparentBlue = 0,
transparentAlpha = 0, transparentIndex = 0, sampleBuffers = 0, samples = 0,
maxPbufferWidth = 0, maxPbufferHeight = 0, maxPbufferPixels = 0,
optimalPbufferWidth = 0, optimalPbufferHeight = 0, swapMethod = 0,
bindToTextureRgb = 0, bindToTextureRgba = 0, bindToMipmapTexture = 0,
bindToTextureTargets = 0, yInverted = 0, sRGBCapable = 0},
DrawBuffer = 0x0, ReadBuffer = 0x0, WinSysDrawBuffer = 0x0, WinSysReadBuffer
= 0x0,
...
------------------------------------------------------</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are the QA Contact for the bug.</li>
<li>You are the assignee for the bug.</li>
</ul>
</body>
</html>