xserver-multidpi/present
Olivier Fourdan b768b7d6ce present/wnmd: Fix use after free on CRTC removal
Xwayland will add and remove CRTCs as Wayland outputs are added or
removed.

If there is a pending flip when this occurs, the
`xwl_present_sync_callback()` will be triggered after the Xwayland
output's RRCtrcPtr has been destroyed, hence causing a crash in Xwayland
while trying to use freed memory:

  #1  abort ()
  #2  OsAbort () at utils.c:1350
  #3  AbortServer () at log.c:877
  #4  FatalError () at log.c:1015
  #5  OsSigHandler () at osinit.c:156
  #6  <signal handler called>
  #7  dixGetPrivate () at ../include/privates.h:122
  #8  dixLookupPrivate () at ../include/privates.h:166
  #9  present_screen_priv () at present_priv.h:198
  #10 present_wnmd_flip () at present_wnmd.c:358
  #11 present_wnmd_execute () at present_wnmd.c:466
  #12 present_wnmd_re_execute () at present_wnmd.c:80
  #13 xwl_present_sync_callback () at xwayland-present.c:287
  #14 ffi_call_unix64 () from /lib64/libffi.so.6
  #15 ffi_call () from /lib64/libffi.so.6
  #16 wl_closure_invoke () at src/connection.c:1006
  #17 dispatch_event () at src/wayland-client.c:1427
  #18 dispatch_queue () at src/wayland-client.c:1573
  #19 wl_display_dispatch_queue_pending () at src/wayland-client.c:1815
  #20 wl_display_dispatch_pending () at src/wayland-client.c:1878
  #21 xwl_read_events () at xwayland.c:814
  #22 ospoll_wait () at ospoll.c:651
  #23 WaitForSomething () at WaitFor.c:208
  #24 Dispatch () at ../include/list.h:220
  #25 dix_main () at main.c:276

To avoid the issue, get the `ScreenPtr` from the window instead of the
CRTC that might have been just freed, `xwl_present_flip()` has no use
for the CRTC anyway.

Bugzilla: https://bugs.freedesktop.org/108249
Suggested-by: Michel Daenzer <michel.daenzer@amd.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Michel Daenzer <michel.daenzer@amd.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2018-10-25 15:05:12 +00:00
..
Makefile.am present: Add window flip mode 2018-03-28 14:36:36 -04:00
meson.build meson: Distribute more SDK headers 2018-04-02 13:42:08 -04:00
present_event.c present: Fix swapping of PresentCompleteNotify events 2018-05-08 12:15:29 -04:00
present_execute.c present: Adapt flip mode API hooks for window flip mode 2018-03-28 14:36:33 -04:00
present_fake.c present: Free the fake_present OsTimerPtr 2016-08-15 15:16:48 -04:00
present_fence.c sync: Convert from "CARD64" to int64_t. 2017-09-20 13:19:27 -04:00
present_notify.c present: Add Present extension 2013-10-31 16:59:18 -07:00
present_priv.h present: Add window flip mode 2018-03-28 14:36:36 -04:00
present_request.c present: cap the version returned to the client 2018-03-19 15:46:41 -04:00
present_scmd.c present: Adapt flip mode API hooks for window flip mode 2018-03-28 14:36:33 -04:00
present_screen.c present: Add exported init function of window flip mode 2018-03-28 14:36:44 -04:00
present_vblank.c present: Add cleanups for window flip mode 2018-03-28 14:36:42 -04:00
present_wnmd.c present/wnmd: Fix use after free on CRTC removal 2018-10-25 15:05:12 +00:00
present.c present: Add more hooks to internal flip mode API 2018-03-28 14:36:27 -04:00
present.h present: Add exported init function of window flip mode 2018-03-28 14:36:44 -04:00
presentext.h present: Add Present extension 2013-10-31 16:59:18 -07:00