Bug#943563: chromium crash when trying to check error status after invalidateing framebuffer in WebGL

2020-01-22 Thread Witold Baryluk
Package: chromium
Followup-For: Bug #943563

Looks to be fixed in chromium 79.

I can't reproduce it now on the same hardware, but with Mesa 19.3.2 (I
was testing with Mesa 19.2.1 previously).

In fact the framebuffer invalidation tests all pass now, and no crashes
either.


There are some other issues with WebGL conformance test, including some
serious regressions, but that should be filled as a separate bug.




-- System Information:
Debian Release: bullseye/sid
  APT prefers testing-debug
  APT policy: (500, 'testing-debug'), (500, 'unstable')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.2.0-3-amd64 (SMP w/32 CPU cores)
Kernel taint flags: TAINT_PROPRIETARY_MODULE, TAINT_OOT_MODULE, 
TAINT_UNSIGNED_MODULE
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), 
LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages chromium depends on:
ii  chromium-common  79.0.3945.130-2
ii  libasound2   1.2.1.2-2
ii  libatk-bridge2.0-0   2.34.1-2
ii  libatk1.0-0  2.34.1-1
ii  libatomic1   9.2.1-24
ii  libatspi2.0-02.34.0-3
ii  libavcodec58 7:4.2.1-2+b1
ii  libavformat587:4.2.1-2+b1
ii  libavutil56  7:4.2.1-2+b1
ii  libc62.29-9
ii  libcairo-gobject21.16.0-4
ii  libcairo21.16.0-4
ii  libcups2 2.3.1-1
ii  libdbus-1-3  1.12.16-2
ii  libdrm2  2.4.100-4
ii  libevent-2.1-7   2.1.11-stable-1
ii  libexpat12.2.9-1
ii  libflac8 1.3.3-1
ii  libfontconfig1   2.13.1-2+b1
ii  libfreetype6 2.10.1-2
ii  libgcc1  1:9.2.1-24
ii  libgdk-pixbuf2.0-0   2.40.0+dfsg-2
ii  libglib2.0-0 2.62.4-1+b1
ii  libgtk-3-0   3.24.13-1
ii  libharfbuzz0b2.6.4-1
ii  libicu63 63.2-2
ii  libjpeg62-turbo  1:1.5.2-2+b1
ii  libjsoncpp1  1.7.4-3+b1
ii  liblcms2-2   2.9-4
ii  libminizip1  1.1-8+b1
ii  libnspr4 2:4.24-1
ii  libnss3  2:3.49-1
ii  libopenjp2-7 2.3.1-1
ii  libopus0 1.3-1+b1
ii  libpango-1.0-0   1.42.4-8
ii  libpangocairo-1.0-0  1.42.4-8
ii  libpci3  1:3.6.2-6
ii  libpng16-16  1.6.37-1
ii  libpulse013.0-3
ii  libre2-5 20200101+dfsg-1
ii  libsnappy1v5 1.1.7-2
ii  libstdc++6   9.2.1-24
ii  libva2   2.6.1-1
ii  libvpx6  1.8.2-1
ii  libwebp6 0.6.1-2+b1
ii  libwebpdemux20.6.1-2+b1
ii  libwebpmux3  0.6.1-2+b1
ii  libx11-6 2:1.6.8-1
ii  libx11-xcb1  2:1.6.8-1
ii  libxcb1  1.13.1-3
ii  libxcomposite1   1:0.4.4-2
ii  libxcursor1  1:1.2.0-2
ii  libxdamage1  1:1.1.5-1
ii  libxext6 2:1.3.3-1+b2
ii  libxfixes3   1:5.0.3-1
ii  libxi6   2:1.7.9-1
ii  libxml2  2.9.4+dfsg1-8
ii  libxrandr2   2:1.5.1-1
ii  libxrender1  1:0.9.10-1
ii  libxslt1.1   1.1.32-2.2
ii  libxss1  1:1.2.3-1
ii  libxtst6 2:1.2.3-1
ii  zlib1g   1:1.2.11.dfsg-1+b1

Versions of packages chromium recommends:
ii  chromium-sandbox  79.0.3945.130-2

Versions of packages chromium suggests:
pn  chromium-driver  
ii  chromium-l10n79.0.3945.130-2
pn  chromium-shell   

Versions of packages chromium-common depends on:
ii  x11-utils  7.7+4
ii  xdg-utils  1.1.3-1

Versions of packages chromium-common recommends:
ii  chromium-sandbox79.0.3945.130-2
ii  fonts-liberation1:1.07.4-10
ii  libgl1-mesa-dri 19.3.2-1
ii  libu2f-udev 1.1.10-1
ii  mate-notification-daemon [notification-daemon]  1.22.1-1
ii  notification-daemon 3.20.0-4
ii  system-config-printer   1.5.12-1
ii  upower  0.99.11-1

Versions of packages chromium-sandbox depends on:
ii  libatomic1  9.2.1-24
ii  libc6   2.29-9
ii  libgcc1 1:9.2.1-24
ii  libstdc++6  9.2.1-24

-- no debconf information



Bug#943563: chromium crash when trying to check error status after invalidateing framebuffer in WebGL

2019-11-16 Thread Witold Baryluk
Package: chromium
Version: 78.0.3904.97-1+b1
Followup-For: Bug #943563

Tested with newer chromium from unstable.

This is with mesa from Debian testing and debug symbols enabled:

Thread 20 "Chrome_InProcGp" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffb27fc700 (LWP 68141)]
0x7fff8a8d9337 in st_discard_framebuffer (ctx=0x7fff9809e4a0, 
fb=0x7fff992e59d0, att=) at 
../src/mesa/state_tracker/st_cb_fbo.h:79
79  ../src/mesa/state_tracker/st_cb_fbo.h: No such file or directory.
(gdb) bt
#0  0x7fff8a8d9337 in st_discard_framebuffer (ctx=0x7fff9809e4a0, 
fb=0x7fff992e59d0, att=) at 
../src/mesa/state_tracker/st_cb_fbo.h:79
#1  0x7fff8a775b29 in discard_framebuffer (ctx=0x7fff9809e4a0, 
fb=0x7fff992e59d0, numAttachments=, attachments=0x7fff992a7d60) 
at ../src/mesa/main/fbobject.c:4917
#2  0x5a38b383 in 
gpu::gles2::GLES2DecoderImpl::InvalidateFramebufferImpl(unsigned int, int, 
unsigned int const volatile*, int, int, int, int, char const*, 
gpu::gles2::GLES2DecoderImpl::FramebufferOperation) ()
#3  0x5a38b9fd in 
gpu::gles2::GLES2DecoderImpl::HandleInvalidateFramebufferImmediate(unsigned 
int, void const volatile*) ()
#4  0x5a3be2a2 in gpu::error::Error 
gpu::gles2::GLES2DecoderImpl::DoCommandsImpl(unsigned int, void const 
volatile*, int, int*) ()
#5  0x5a271ae1 in gpu::CommandBufferService::Flush(int, 
gpu::AsyncAPIInterface*) ()
#6  0x5a51a3d7 in gpu::CommandBufferStub::OnAsyncFlush(int, unsigned 
int, std::vector > const&) ()
#7  0x5a51ad77 in 
gpu::CommandBufferStub::OnMessageReceived(IPC::Message const&) ()
#8  0x5d8b8ca3 in IPC::MessageRouter::RouteMessage(IPC::Message const&) 
()
#9  0x5a531917 in gpu::GpuChannel::HandleMessageHelper(IPC::Message 
const&) ()
#10 0x5a5319cb in gpu::GpuChannel::HandleMessage(IPC::Message const&) ()
#11 0x5a276919 in gpu::Scheduler::RunNextTask() ()
#12 0x5931e255 in base::TaskAnnotator::RunTask(char const*, 
base::PendingTask*) ()
#13 0x59337124 in 
base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoWorkImpl(base::sequence_manager::LazyNow*,
 bool*) ()
#14 0x593376dd in 
base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::DoSomeWork()
 ()
#15 0x592e12e6 in 
base::MessagePumpDefault::Run(base::MessagePump::Delegate*) ()
#16 0x593211af in 
base::sequence_manager::internal::ThreadControllerWithMessagePumpImpl::Run(bool,
 base::TimeDelta) ()
#17 0x593085ba in base::RunLoop::Run() ()
#18 0x5934adf3 in base::Thread::ThreadMain() ()
#19 0x59389f8a in base::(anonymous namespace)::ThreadFunc(void*) ()
#20 0x77f78fb7 in start_thread (arg=) at 
pthread_create.c:486
#21 0x713612cf in clone () at 
../sysdeps/unix/sysv/linux/x86_64/clone.S:95
(gdb) quit



I can retest with upstream Mesa from git and compiled myself and
correlate lines better.



Bug#943563: chromium crash when trying to check error status after invalidateing framebuffer in WebGL

2019-11-08 Thread Michael Gilbert
control: tag -1 moreinfo

On Sat, Oct 26, 2019 at 10:48 AM Witold Baryluk wrote:
> Thread 20 "Chrome_InProcGp" received signal SIGSEGV, Segmentation fault.
> [Switching to Thread 0x7fffaa7fc700 (LWP 32634)]
> 0x7fff770d9c37 in ?? () from /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so
> (gdb) bt
> #0  0x7fff770d9c37 in  () at /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so
> #1  0x7fff76f76409 in  () at /usr/lib/x86_64-linux-gnu/dri/radeonsi_dri.so
> #2  0x59e1d3b1 in 
> gpu::gles2::GLES2DecoderImpl::InvalidateFramebufferImpl(unsigned int, int, 
> unsigned int const volatile*, int, int, int, int, char const*, 
> gpu::gles2::GLES2DecoderImpl::FramebufferOperation) ()
> #3  0x59e2030a in 
> gpu::gles2::GLES2DecoderImpl::HandleInvalidateFramebufferImmediate(unsigned 
> int, void const volatile*) ()
> #4  0x59dfa261 in gpu::error::Error 
> gpu::gles2::GLES2DecoderImpl::DoCommandsImpl(unsigned int, void const 
> volatile*, int, int*) ()

This looks like an error in the RadeonSI driver.  Could you try
installing libgl1-mesa-dri-dbgsym to fill in the ?? in the backtrace?

Best wishes,
Mike



Bug#943563: chromium crash when trying to check error status after invalidateing framebuffer in WebGL

2019-10-26 Thread Witold Baryluk
Package: chromium
Version: 76.0.3809.100-1
Severity: normal

Dear Maintainer,


When visiting 
https://www.khronos.org/registry/webgl/sdk/tests/conformance2/renderbuffers/invalidate-framebuffer.html?webglVersion=2=0=1


the test fails:

This tests invalidateFramebuffer and invalidateSubFramebuffer

On success, you will see a series of "PASS" messages, followed by "TEST 
COMPLETE".


Canvas.getContext
PASS context exists

invalidate framebuffer.
PASS gl.checkFramebufferStatus(gl.FRAMEBUFFER) is 
gl.FRAMEBUFFER_INCOMPLETE_ATTACHMENT
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
to invalidate an incomplete attachment will be ignored. There should be no 
errors
PASS getError was expected value: NO_ERROR : calling invalidateFramebuffer to 
invalidate an incomplete attachment will be ignored. There should be no errors.
FAIL getError expected: NO_ERROR. Was INVALID_OPERATION : should be no errors 
after attaching a multi-sampled renderbuffer to fbo.
FAIL gl.checkFramebufferStatus(gl.FRAMEBUFFER) should be 36054. Was 0.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
to invalidate an incomplete attachment will be ignored. There should be no 
errors
PASS getError was expected value: NO_ERROR : calling invalidateFramebuffer to 
invalidate an incomplete attachment will be ignored. There should be no errors.
FAIL getError expected: NO_ERROR. Was INVALID_OPERATION : should be no errors 
after attaching a renderbuffer to fbo.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
to invalidate a specified attachment that does not exist will be ignored. There 
should be no errors.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed.
PASS getError was expected value: INVALID_VALUE : calling 
invalidateSubFramebuffer should generate INVALID_VALUE if width < 0 or height < 
0.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed, even the invalidated pixels may be outside of the framebuffer 
allocated to current context. These pixels are ignored.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed, even the invalidated pixels may be outside of the framebuffer 
allocated to current context. These pixels are ignored.
PASS getError was expected value: NO_ERROR : calling invalidateFramebuffer to 
invalidate a specified attachment that does not exist will be ignored. There 
should be no errors.
PASS getError was expected value: NO_ERROR : calling invalidateFramebuffer 
should succeed.
PASS getError was expected value: NO_ERROR : should be no errors after 
attaching a renderbuffer to fbo.
PASS getError was expected value: NO_ERROR : should be no errors after bliting 
framebuffer.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
to invalidate a specified attachment that does not exist will be ignored. There 
should be no errors.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed.
PASS getError was expected value: INVALID_VALUE : calling 
invalidateSubFramebuffer should generate INVALID_VALUE if width < 0 or height < 
0.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed, even the invalidated pixels may be outside of the framebuffer 
allocated to current context. These pixels are ignored.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed, even the invalidated pixels may be outside of the framebuffer 
allocated to current context. These pixels are ignored.
PASS getError was expected value: NO_ERROR : calling invalidateFramebuffer to 
invalidate a specified attachment that does not exist will be ignored. There 
should be no errors.
PASS getError was expected value: NO_ERROR : calling invalidateFramebuffer 
should succeed.
FAIL getError expected one of: INVALID_OPERATION or INVALID_ENUM. Was NO_ERROR 
: calling invalidateSubFramebuffer to invalidate a COLOR_ATTACHMENT that 
exceeds MAX_COLOR_ATTACHMENT should generate INVALID_ENUM or INVALID_OPERATION.
FAIL getError expected one of: INVALID_OPERATION or INVALID_ENUM. Was NO_ERROR 
: calling invalidateFramebuffer to invalidate a COLOR_ATTACHMENT that exceeds 
MAX_COLOR_ATTACHMENT should generate INVALID_ENUM or INVALID_OPERATION.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
to invalidate a specified attachment that does not exist will be ignored. There 
should be no errors.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed.
PASS getError was expected value: INVALID_VALUE : calling 
invalidateSubFramebuffer should generate INVALID_VALUE if width < 0 or height < 
0.
PASS getError was expected value: NO_ERROR : calling invalidateSubFramebuffer 
should succeed, even the invalidated pixels may be outside of the framebuffer 
allocated to current