• Olivier Fourdan's avatar
    xwayland: handle case without any crtc · e8295c50
    Olivier Fourdan authored
    Xwayland creates and destroys the CRTC along with the Wayland outputs,
    so there is possibly a case where the number of CRTC drops to 0.
    
    However, `xwl_present_get_crtc()` always return `crtcs[0]` which is
    invalid when `numCrtcs` is 0.
    
    That leads to crash if a client queries the Present capabilities when
    there is no CRTC, the backtrace looks like:
    
      #0  raise() from libc.so
      #1  abort() from libc.so
      #2  OsAbort() at utils.c:1350
      #3  AbortServer() at log.c:879
      #4  FatalError() at log.c:1017
      #5  OsSigHandler() at osinit.c:156
      #6  OsSigHandler() at osinit.c:110
      #7  <signal handler called>
      #8  main_arena() from libc.so
      #9  proc_present_query_capabilities() at present_request.c:236
      #10 Dispatch() at dispatch.c:478
      #11 dix_main() at main.c:276
    
    To avoid returning an invalid pointer (`crtcs[0]`) in that case, simply
    check for `numCrtcs` being 0 and return `NULL` in that case.
    
    Thanks to Michel Dänzer <michel.daenzer@amd.com> for pointing this as a
    possible cause of the crash.
    Signed-off-by: 's avatarOlivier Fourdan <ofourdan@redhat.com>
    Reviewed-by: Michel Dänzer's avatarMichel Dänzer <michel.daenzer@amd.com>
    Bugzilla: https://bugzilla.redhat.com/1609181
    e8295c50
Name
Last commit
Last update
.gitlab-ci Loading commit data...
Xext Loading commit data...
Xi Loading commit data...
composite Loading commit data...
config Loading commit data...
damageext Loading commit data...
dbe Loading commit data...
dix Loading commit data...
doc Loading commit data...
dri3 Loading commit data...
exa Loading commit data...
fb Loading commit data...
glamor Loading commit data...
glx Loading commit data...
hw Loading commit data...
include Loading commit data...
m4 Loading commit data...
man Loading commit data...
mi Loading commit data...
miext Loading commit data...
os Loading commit data...
present Loading commit data...
pseudoramiX Loading commit data...
randr Loading commit data...
record Loading commit data...
render Loading commit data...
test Loading commit data...
xfixes Loading commit data...
xkb Loading commit data...
.appveyor.yml Loading commit data...
.dir-locals.el Loading commit data...
.gitignore Loading commit data...
.gitlab-ci.yml Loading commit data...
.travis.yml Loading commit data...
COPYING Loading commit data...
Makefile.am Loading commit data...
README.md Loading commit data...
autogen.sh Loading commit data...
configure.ac Loading commit data...
devbook.am Loading commit data...
docbook.am Loading commit data...
manpages.am Loading commit data...
meson.build Loading commit data...
meson_options.txt Loading commit data...
xorg-server.m4 Loading commit data...
xorg-server.pc.in Loading commit data...
xserver.ent.in Loading commit data...