• Olivier Fourdan's avatar
    glamor: restore vfunc handlers on init failure · b711efb0
    Olivier Fourdan authored
    In glamor_init(), if the minimum requirements are not met, glamor may
    fail after setting up its own CloseScreen() and DestroyPixmap()
    routines, leading to a crash when either of the two routines is called
    if glamor failed to complete its initialization, e.g:
    
      (EE) Backtrace:
      (EE) 0:  Xwayland (OsSigHandler+0x29)
      (EE) 1: /lib64/libpthread.so.0 (__restore_rt+0x0)
      (EE) 2: Xwayland (glamor_sync_close+0x2a)
      (EE) 3: Xwayland (glamor_close_screen+0x52)
      (EE) 4: Xwayland (CursorCloseScreen+0x88)
      (EE) 5: Xwayland (AnimCurCloseScreen+0xa4)
      (EE) 6: Xwayland (present_close_screen+0x42)
      (EE) 7: Xwayland (dix_main+0x4f9)
      (EE) 8: /lib64/libc.so.6 (__libc_start_main+0xf1)
      (EE) 9:  Xwayland (_start+0x2a)
    
    Restore the previous CloseScreen() and DestroyPixmap() vfunc handlers in
    case of failure when checking for the minimum requirements, so that if
    any of the requirement is not met we don't leave the CloseScreen() and
    DestroyPixmap() from glamor handlers in place.
    
    Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1390018Signed-off-by: default avatarOlivier Fourdan <ofourdan@redhat.com>
    Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
    Reviewed-by: Eric Anholt's avatarEric Anholt <eric@anholt.net>
    (cherry picked from commit f43207c1)
    b711efb0
glamor.c 28.9 KB