xserver/hw/xwayland
Olivier Fourdan f6cd99ed79 xwayland: remove dirty window unconditionally on unrealize
This is a rare occurrence of a crash in Xwayland for which I don't have
the reproducing steps, just a core file.

The backtrace looks as follow:

  #0  raise () from /usr/lib64/libc.so.6
  #1  abort () from /usr/lib64/libc.so.6
  #2  OsAbort () at utils.c:1361
  #3  AbortServer () at log.c:877
  #4  FatalError () at log.c:1015
  #5  OsSigHandler () at osinit.c:154
  #6  <signal handler called>
  #7  xwl_glamor_pixmap_get_wl_buffer () at xwayland-glamor.c:162
  #8  xwl_screen_post_damage () at xwayland.c:514
  #9  block_handler () at xwayland.c:665
  #10 BlockHandler () at dixutils.c:388
  #11 WaitForSomething () at WaitFor.c:219
  #12 Dispatch () at dispatch.c:422
  #13 dix_main () at main.c:287

The crash is caused by dereferencing “xwl_pixmap->buffer” in
xwl_glamor_pixmap_get_wl_buffer() because “xwl_pixmap” is NULL.

Reason for this is because the corresponding pixmap is from the root
window and xwayland is rootless by default.

This can happen if the window was mapped, redirected, damaged and
unredirected immediately, before the damage is processed by Xwayland.

Make sure to remove the dirty window from the damage list on unrealize
to prevent this from happening.

Credit goes to Adam Jackson <ajax@nwnk.net> and Daniel Stone
<daniel@fooishbar.org> for finding the root cause the issue.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
(cherry picked from commit 3362422e84)
2018-02-12 14:50:39 -05:00
..
.gitignore xwayland: Bind pointer constraints global 2016-10-05 13:50:46 -04:00
drm.xml wayland: Sync drm.xml with Mesa 2017-09-25 15:34:10 -04:00
Makefile.am xwayland: Bind pointer constraints global 2016-10-05 13:50:46 -04:00
xwayland-cursor.c xwayland: Fix non-argb cursor conversion 2017-12-13 10:08:45 -05:00
xwayland-cvt.c xwayland: Add hack for FWXGA resolution #99574 2017-02-23 14:27:16 -05:00
xwayland-glamor-xv.c xwayland: Fix compiler warning in GLAMOR Xv 2016-04-15 16:22:16 -04:00
xwayland-glamor.c xwayland: Monitor client states to destroy callbacks 2017-03-13 09:56:24 +01:00
xwayland-input.c xwayland: avoid race condition on new keymap 2018-01-22 14:06:44 -05:00
xwayland-output.c xwayland: Update root window size when desktop size changes 2017-09-25 15:34:10 -04:00
xwayland-shm.c xwayland-shm: block signals during fallocate 2016-11-01 14:00:04 -04:00
xwayland-vidmode.c xwayland: Pretend we support viewport in vidmode 2016-03-28 14:10:59 -04:00
xwayland.c xwayland: remove dirty window unconditionally on unrealize 2018-02-12 14:50:39 -05:00
xwayland.h xwayland: Add pointer warp emulator 2016-10-05 13:51:02 -04:00