xserver/hw/xwayland
Olivier Fourdan cf8e064ec0 xwayland: do not crash if `gbm_bo_create()` fails
The function `xwl_glamor_gbm_create_pixmap()` first creates a buffer
objects and then creates the xwl_pixmap from it.

However, `xwl_glamor_gbm_create_pixmap_for_bo()` is not called if the
buffer object creation fails, and `xwl_glamor_gbm_create_pixmap()`
simply returns `glamor_create_pixmap()`.

The problem with this is that if `xwl_glamor_gbm_create_pixmap_for_bo()`
is not called then neither is `xwl_pixmap_set_private()` and further
calls to `xwl_pixmap_get()` will return NULL and cause a NULL pointer
dereference if the return value is not checked:

  #0  xwl_glamor_gbm_get_wl_buffer_for_pixmap ()
      at hw/xwayland/xwayland-glamor-gbm.c:248
  #1  xwl_window_post_damage () at hw/xwayland/xwayland.c:697
  #2  xwl_display_post_damage () at hw/xwayland/xwayland.c:759
  #3  block_handler () at hw/xwayland/xwayland.c:890
  #4  BlockHandler () at dix/dixutils.c:388
  #5  WaitForSomething () at os/WaitFor.c:201
  #6  Dispatch () at dix/dispatch.c:421
  #7  dix_main () at dix/main.c:276
  #8  __libc_start_main () at ../csu/libc-start.c:308
  #9  _start ()

  (gdb) print xwl_pixmap
  $1 = (struct xwl_pixmap *) 0x0

Make sure we check for `xwl_pixmap_get()` returned value where relevant
and fail gracefully if this is the case.

See also: https://gitlab.gnome.org/GNOME/mutter/issues/340

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Marco Trevisan <mail@3v1n0.net>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 036794bebc)
2019-01-09 15:26:33 +01:00
..
.gitignore glamor: Implement PixmapFromBuffers and BuffersFromPixmap 2018-03-05 13:27:49 -05:00
Makefile.am xwayland: Add glamor egl_backend for EGLStreams 2018-04-24 16:51:18 -04:00
drm.xml wayland: Sync drm.xml with Mesa 2017-07-05 10:13:04 -04:00
meson.build xwayland: Add glamor egl_backend for EGLStreams 2018-04-24 16:51:18 -04:00
xwayland-cursor.c xwayland: Fix non-argb cursor conversion 2017-12-06 10:15:57 -05:00
xwayland-cvt.c xwayland: Add hack for FWXGA resolution #99574 2017-02-08 12:32:16 -05:00
xwayland-glamor-eglstream.c xwayland: simplify xwl_glamor_pixmap_get_wl_buffer() 2018-08-01 11:01:37 -04:00
xwayland-glamor-gbm.c xwayland: do not crash if `gbm_bo_create()` fails 2019-01-09 15:26:33 +01:00
xwayland-glamor-xv.c xwayland: use the lowercase xnf.*alloc API 2017-09-06 08:56:39 +10:00
xwayland-glamor.c xwayland: Enable DRI3 for glamor 2018-08-02 10:04:10 -04:00
xwayland-input.c xwayland: Use `double` for `xwl_tablet_tool` 2018-10-04 17:27:08 +02:00
xwayland-output.c xwayland: fix access to invalid pointer 2018-10-04 17:25:19 +02:00
xwayland-present.c xwayland: Plug leaks in xwl_present_sync_callback 2019-01-09 15:26:33 +01:00
xwayland-shm.c xserver: Check the right HAVE_*_CONFIG_H. 2017-03-23 13:17:39 -04:00
xwayland-vidmode.c xwayland: Pretend we support viewport in vidmode 2016-03-28 14:10:59 -04:00
xwayland.c xwayland: simplify xwl_glamor_pixmap_get_wl_buffer() 2018-08-01 11:01:37 -04:00
xwayland.h xwayland: Use `double` for `xwl_tablet_tool` 2018-10-04 17:27:08 +02:00