We have been waiting for a very long time. I am giving up on upstream merging the commits. Let's vendor the patch. New debdiffs inbound. SRU template ready.
** Also affects: xorg-server (Ubuntu Plucky) Importance: High Status: Confirmed ** Changed in: xorg-server (Ubuntu Noble) Importance: Undecided => High ** Changed in: xorg-server (Ubuntu Jammy) Importance: Undecided => High ** Changed in: xorg-server (Ubuntu Focal) Importance: Undecided => High ** Changed in: xorg-server (Ubuntu Plucky) Status: Confirmed => In Progress ** Changed in: xorg-server (Ubuntu Oracular) Status: Confirmed => In Progress ** Changed in: xorg-server (Ubuntu Noble) Status: Confirmed => In Progress ** Changed in: xorg-server (Ubuntu Jammy) Status: Confirmed => In Progress ** Changed in: xorg-server (Ubuntu Focal) Status: Confirmed => In Progress ** Changed in: xorg-server (Ubuntu Plucky) Assignee: (unassigned) => Matthew Ruffell (mruffell) ** Changed in: xorg-server (Ubuntu Oracular) Assignee: (unassigned) => Matthew Ruffell (mruffell) ** Changed in: xorg-server (Ubuntu Noble) Assignee: (unassigned) => Matthew Ruffell (mruffell) ** Changed in: xorg-server (Ubuntu Focal) Assignee: (unassigned) => Matthew Ruffell (mruffell) ** Changed in: xorg-server (Ubuntu Jammy) Assignee: (unassigned) => Matthew Ruffell (mruffell) ** Summary changed: - Xorg crashed with assertion failure (usually in a VM) at [privates.h:121/122: dixGetPrivateAddr: Assertion `key->initialized' failed] + Xorg crashes with assertion failure at dixGetPrivateAddr: Assertion `key->initialized' failed ** Description changed: - Xorg crashed with assertion failure (usually in a VM): + [Impact] - privates.h:121: dixGetPrivateAddr: Assertion `key->initialized' failed. + A very common crash in Xorg occurs when an application you are trying to launch + does not call DRI2ScreenInit() before calling DRI2Authenticate() or + DRI2CreateDrawable2(). - WORKAROUND + This brings down the entire Xserver, and you lose all work. - Select 'Ubuntu on Wayland' on the login screen. + This isn't just a single application, common ones are gstreamer1.0-vaapi + either invoked as gst-inspect-1.0 or through file manager thumbnailers, + Intel libva, and more. + + The solution is to make DRI2Authenticate() and DRI2CreateDrawable2() more + robust to not having had DRI2ScreenInit() called, and to pass the error up + instead of just crashing on the assert. + + Stack traces from logs: + + Xorg: ../../../../../../include/privates.h:122: dixGetPrivateAddr: Assertion `key->initialized' failed. + (EE) + (EE) Backtrace: + (EE) 0: /usr/lib/xorg/Xorg (OsLookupColor+0x14c) [0x587abb9686dc] + (EE) 1: /lib/x86_64-linux-gnu/libc.so.6 (__sigaction+0x50) [0x747466445650] + (EE) 2: /lib/x86_64-linux-gnu/libc.so.6 (pthread_kill+0x11c) [0x7474664a3f5c] + (EE) 3: /lib/x86_64-linux-gnu/libc.so.6 (gsignal+0x1e) [0x74746644559e] + (EE) 4: /lib/x86_64-linux-gnu/libc.so.6 (abort+0xdf) [0x747466428902] + (EE) unw_get_proc_name failed: no unwind info found [-10] + (EE) 5: /lib/x86_64-linux-gnu/libc.so.6 (?+0x0) [0x74746642881e] + (EE) 6: /lib/x86_64-linux-gnu/libc.so.6 (__assert_fail+0x47) [0x74746643bb87] + (EE) 7: /usr/lib/xorg/Xorg (DRIMoveBuffersHelper+0xb13) [0x587abb90de23] + (EE) 8: /usr/lib/xorg/Xorg (DRI2Authenticate+0xce) [0x587abb9108de] + (EE) 9: /usr/lib/xorg/Xorg (DRI2GetParam+0x6d9) [0x587abb9116f9] + (EE) 10: /usr/lib/xorg/Xorg (SendErrorToClient+0x3fc) [0x587abb7a004c] + (EE) 11: /usr/lib/xorg/Xorg (InitFonts+0x3b3) [0x587abb7a5623] + (EE) 12: /lib/x86_64-linux-gnu/libc.so.6 (__libc_init_first+0x88) [0x74746642a3b8] + (EE) 13: /lib/x86_64-linux-gnu/libc.so.6 (__libc_start_main+0x8b) [0x74746642a47b] + (EE) 14: /usr/lib/xorg/Xorg (_start+0x25) [0x587abb789685] + (EE) + (EE) + Fatal server error: + (EE) Caught signal 6 (Aborted). Server aborting + + #0 _XReply (dpy=dpy@entry=0x55555558dce0, rep=rep@entry=0x7fffffffd6f0, extra=extra@entry=0, discard=discard@entry=0) + at ../../src/xcb_io.c:680 + #1 0x00007ffff752a3d0 in VA_DRI2Authenticate (dpy=dpy@entry=0x55555558dce0, window=1046, magic=magic@entry=1) + at ../va/x11/va_dri2.c:225 + #2 0x00007ffff7c138ed in va_drm_authenticate_x11 (fd=fd@entry=6, magic=magic@entry=1) at ../va/drm/va_drm_auth_x11.c:140 + #3 0x00007ffff7c135d5 in va_drm_authenticate (fd=6, magic=1) at ../va/drm/va_drm_auth.c:37 + #4 0x00007ffff7c134bd in va_DisplayContextConnect (pDisplayContext=<optimized out>) at ../va/drm/va_drm.c:62 + #5 va_DisplayContextGetDriverNames (pDisplayContext=<optimized out>, drivers=0x7fffffffd890, num_drivers=0x7fffffffd884) + at ../va/drm/va_drm.c:79 + #6 0x00007ffff781729e in va_new_opendriver (dpy=0x55555558d310) at ../va/va.c:681 + #7 vaInitialize + (dpy=dpy@entry=0x55555558d310, major_version=major_version@entry=0x7fffffffdb34, minor_version=minor_version@entry=0x7fffffffdb30) at ../va/va.c:743 + #8 0x00007ffff7f496d0 in vaapi_initialize (dpy=0x55555558d310) at ../gst-libs/gst/vaapi/gstvaapiutils.c:113 + #9 0x00007ffff7f6db73 in supports_vaapi (fd=6) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:77 + #10 get_default_device_path (display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1]) + at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:140 + #11 set_device_path (device_path=<optimized out>, display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1]) + at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:181 + #12 gst_vaapi_display_drm_open_display (display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1], name=<optimized out>) + at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:247 + #13 0x00007ffff7f4a68b in gst_vaapi_display_create + (data=0x0, init_type=GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1]) + at ../gst-libs/gst/vaapi/gstvaapidisplay.c:965 + #14 gst_vaapi_display_config + (display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1], init_type=GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, init_value=0x0) at ../gst-libs/gst/vaapi/gstvaapidisplay.c:1272 + #15 0x00007ffff7f709a1 in gst_vaapi_display_drm_new (device_path=0x0) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:367 + #16 0x00007ffff7f0c295 in gst_vaapi_create_test_display () at ../gst/vaapi/gstvaapipluginutil.c:929 + #17 plugin_init (plugin=0x555555585b10 [GstPlugin|plugin1]) at ../gst/vaapi/gstvaapi.c:191 + #18 0x00007ffff7e22452 in gst_plugin_register_func + (plugin=plugin@entry=0x555555585b10 [GstPlugin|plugin1], desc=desc@entry=0x7ffff7fb71a0 <gst_plugin_desc>, user_data=user_data@entry=0x0) at ../gst/gstplugin.c:540 + #19 0x00007ffff7e279c0 in _priv_gst_plugin_load_file_for_registry + (filename=0x55555558122c "/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so", registry=<optimized out>, error=<optimized out>) at ../gst/gstplugin.c:979 + #20 0x00007ffff7e6ed41 in do_plugin_load + (tag=0, filename=0x55555558122c "/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so", l=<optimized out>) + at ../gst/gstpluginloader.c:741 + #21 handle_rx_packet + (payload_len=<optimized out>, payload=0x55555558122c "/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so", tag=0, pack_type=<optimized out>, l=<optimized out>) at ../gst/gstpluginloader.c:849 + #22 read_one (l=0x555555584a30) at ../gst/gstpluginloader.c:1025 + #23 exchange_packets (l=l@entry=0x555555584a30) at ../gst/gstpluginloader.c:1053 + #24 0x00007ffff7e703a8 in _gst_plugin_loader_client_run (pipe_name=pipe_name@entry=0x0) at ../gst/gstpluginloader.c:596 + #25 0x00005555555551db in main (argc=<optimized out>, argv=<optimized out>) at ../libs/gst/helpers/gst-plugin-scanner.c:81 + + [Testcase] + + Start a fresh VM. Make sure the session is using X Server. + + $ sudo apt install gstreamer1.0-vaapi gstreamer1.0-tools + $ gst-inspect-1.0 + + On plucky, you don't even need to run gst-inspect-1.0, just try log in, you will + quickly find that xserver is broken and you aren't getting a X session today. + + Review the backtrace in /var/log/syslog. + + If you install a test package from the following ppa, the issue does not + occur: + + https://launchpad.net/~mruffell/+archive/ubuntu/sf392117-test + + [Where problems could occur] + + We are adding some protection on the xserver side against user-space applications + that incorrectly do not call DRI2ScreenInit() before attempting to construct + a window. + + It would be best if all applications would call DRI2ScreenInit(), but if an + applications don't, then we need to not crash the entire xserver. + + Regressions could occur in unintended behaviour for applications that can get + away without calling DRI2ScreenInit(), but those applications will likely just + continue working as usual. + + If a regression were to occur, it would occur when launching applications in + Xorg desktop environments. + + [Other Info] + + Duplicate Bugs + -------------- + + At the time of writing the primary Launchpad bug has 19 duplicate bugs, which + is the most I have ever seen, so this bug impacts a large amount of people. + + Upstream Bugs + ------------- + + https://gitlab.freedesktop.org/xorg/xserver/-/issues/1053 + https://gitlab.freedesktop.org/xorg/xserver/-/issues/1340 + https://gitlab.freedesktop.org/xorg/xserver/-/issues/1534 + https://lists.x.org/archives/xorg-devel/2024-September/059318.html + + Downstream Bugs + --------------- + + https://bugs.gentoo.org/841662 + + Merge Request and Fix + --------------------- + + https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1608 + + commit 07931601759be31b86892fd1485bc127edadf65e + From: Doug Brown <d...@schmorgal.com> + Date: Mon, 15 Jul 2024 19:44:23 -0700 + Subject: dri2: Protect against dri2ClientPrivate assertion failures + Link: https://gitlab.freedesktop.org/xorg/xserver/-/commit/07931601759be31b86892fd1485bc127edadf65e?merge_request_iid=1608 + + NOTE THIS IS NOT MERGED UPSTREAM, AND WILL BE VENDORED TO UBUNTU. See reasons + below. + + The State of Upstream xserver + ----------------------------- + + Upstream xserver is on essential life-support maintenance at the moment. + No one is interested in reviewing or merging the merge request, after repeated + messages to the issue, merge quest, and development mailing list. + + If you review: + + https://gitlab.freedesktop.org/xorg/xserver/-/issues/1757 + + Then it becomes clear there are many other open merge requests waiting for + attention, and the only person who seems interested in these, Enrico Weigelt, + comments and gives attention, but he cannot merge due to not being a maintainer, + and the maintainers are being a little rude to him in that particular issue. + + In short, this patch would have a big impact on the stability of xserver users + on Ubuntu, and we should just vendor this patch. -- You received this bug notification because you are a member of Desktop Packages, which is subscribed to xorg-server in Ubuntu. https://bugs.launchpad.net/bugs/1861609 Title: Xorg crashes with assertion failure at dixGetPrivateAddr: Assertion `key->initialized' failed Status in X.Org X server: New Status in xorg-server package in Ubuntu: In Progress Status in xorg-server source package in Focal: In Progress Status in xorg-server source package in Jammy: In Progress Status in xorg-server source package in Noble: In Progress Status in xorg-server source package in Oracular: In Progress Status in xorg-server source package in Plucky: In Progress Bug description: [Impact] A very common crash in Xorg occurs when an application you are trying to launch does not call DRI2ScreenInit() before calling DRI2Authenticate() or DRI2CreateDrawable2(). This brings down the entire Xserver, and you lose all work. This isn't just a single application, common ones are gstreamer1.0-vaapi either invoked as gst-inspect-1.0 or through file manager thumbnailers, Intel libva, and more. The solution is to make DRI2Authenticate() and DRI2CreateDrawable2() more robust to not having had DRI2ScreenInit() called, and to pass the error up instead of just crashing on the assert. Stack traces from logs: Xorg: ../../../../../../include/privates.h:122: dixGetPrivateAddr: Assertion `key->initialized' failed. (EE) (EE) Backtrace: (EE) 0: /usr/lib/xorg/Xorg (OsLookupColor+0x14c) [0x587abb9686dc] (EE) 1: /lib/x86_64-linux-gnu/libc.so.6 (__sigaction+0x50) [0x747466445650] (EE) 2: /lib/x86_64-linux-gnu/libc.so.6 (pthread_kill+0x11c) [0x7474664a3f5c] (EE) 3: /lib/x86_64-linux-gnu/libc.so.6 (gsignal+0x1e) [0x74746644559e] (EE) 4: /lib/x86_64-linux-gnu/libc.so.6 (abort+0xdf) [0x747466428902] (EE) unw_get_proc_name failed: no unwind info found [-10] (EE) 5: /lib/x86_64-linux-gnu/libc.so.6 (?+0x0) [0x74746642881e] (EE) 6: /lib/x86_64-linux-gnu/libc.so.6 (__assert_fail+0x47) [0x74746643bb87] (EE) 7: /usr/lib/xorg/Xorg (DRIMoveBuffersHelper+0xb13) [0x587abb90de23] (EE) 8: /usr/lib/xorg/Xorg (DRI2Authenticate+0xce) [0x587abb9108de] (EE) 9: /usr/lib/xorg/Xorg (DRI2GetParam+0x6d9) [0x587abb9116f9] (EE) 10: /usr/lib/xorg/Xorg (SendErrorToClient+0x3fc) [0x587abb7a004c] (EE) 11: /usr/lib/xorg/Xorg (InitFonts+0x3b3) [0x587abb7a5623] (EE) 12: /lib/x86_64-linux-gnu/libc.so.6 (__libc_init_first+0x88) [0x74746642a3b8] (EE) 13: /lib/x86_64-linux-gnu/libc.so.6 (__libc_start_main+0x8b) [0x74746642a47b] (EE) 14: /usr/lib/xorg/Xorg (_start+0x25) [0x587abb789685] (EE) (EE) Fatal server error: (EE) Caught signal 6 (Aborted). Server aborting #0 _XReply (dpy=dpy@entry=0x55555558dce0, rep=rep@entry=0x7fffffffd6f0, extra=extra@entry=0, discard=discard@entry=0) at ../../src/xcb_io.c:680 #1 0x00007ffff752a3d0 in VA_DRI2Authenticate (dpy=dpy@entry=0x55555558dce0, window=1046, magic=magic@entry=1) at ../va/x11/va_dri2.c:225 #2 0x00007ffff7c138ed in va_drm_authenticate_x11 (fd=fd@entry=6, magic=magic@entry=1) at ../va/drm/va_drm_auth_x11.c:140 #3 0x00007ffff7c135d5 in va_drm_authenticate (fd=6, magic=1) at ../va/drm/va_drm_auth.c:37 #4 0x00007ffff7c134bd in va_DisplayContextConnect (pDisplayContext=<optimized out>) at ../va/drm/va_drm.c:62 #5 va_DisplayContextGetDriverNames (pDisplayContext=<optimized out>, drivers=0x7fffffffd890, num_drivers=0x7fffffffd884) at ../va/drm/va_drm.c:79 #6 0x00007ffff781729e in va_new_opendriver (dpy=0x55555558d310) at ../va/va.c:681 #7 vaInitialize (dpy=dpy@entry=0x55555558d310, major_version=major_version@entry=0x7fffffffdb34, minor_version=minor_version@entry=0x7fffffffdb30) at ../va/va.c:743 #8 0x00007ffff7f496d0 in vaapi_initialize (dpy=0x55555558d310) at ../gst-libs/gst/vaapi/gstvaapiutils.c:113 #9 0x00007ffff7f6db73 in supports_vaapi (fd=6) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:77 #10 get_default_device_path (display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1]) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:140 #11 set_device_path (device_path=<optimized out>, display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1]) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:181 #12 gst_vaapi_display_drm_open_display (display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1], name=<optimized out>) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:247 #13 0x00007ffff7f4a68b in gst_vaapi_display_create (data=0x0, init_type=GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1]) at ../gst-libs/gst/vaapi/gstvaapidisplay.c:965 #14 gst_vaapi_display_config (display=0x5555555892a0 [GstVaapiDisplayDRM|vaapidisplaydrm1], init_type=GST_VAAPI_DISPLAY_INIT_FROM_DISPLAY_NAME, init_value=0x0) at ../gst-libs/gst/vaapi/gstvaapidisplay.c:1272 #15 0x00007ffff7f709a1 in gst_vaapi_display_drm_new (device_path=0x0) at ../gst-libs/gst/vaapi/gstvaapidisplay_drm.c:367 #16 0x00007ffff7f0c295 in gst_vaapi_create_test_display () at ../gst/vaapi/gstvaapipluginutil.c:929 #17 plugin_init (plugin=0x555555585b10 [GstPlugin|plugin1]) at ../gst/vaapi/gstvaapi.c:191 #18 0x00007ffff7e22452 in gst_plugin_register_func (plugin=plugin@entry=0x555555585b10 [GstPlugin|plugin1], desc=desc@entry=0x7ffff7fb71a0 <gst_plugin_desc>, user_data=user_data@entry=0x0) at ../gst/gstplugin.c:540 #19 0x00007ffff7e279c0 in _priv_gst_plugin_load_file_for_registry (filename=0x55555558122c "/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so", registry=<optimized out>, error=<optimized out>) at ../gst/gstplugin.c:979 #20 0x00007ffff7e6ed41 in do_plugin_load (tag=0, filename=0x55555558122c "/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so", l=<optimized out>) at ../gst/gstpluginloader.c:741 #21 handle_rx_packet (payload_len=<optimized out>, payload=0x55555558122c "/usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstvaapi.so", tag=0, pack_type=<optimized out>, l=<optimized out>) at ../gst/gstpluginloader.c:849 #22 read_one (l=0x555555584a30) at ../gst/gstpluginloader.c:1025 #23 exchange_packets (l=l@entry=0x555555584a30) at ../gst/gstpluginloader.c:1053 #24 0x00007ffff7e703a8 in _gst_plugin_loader_client_run (pipe_name=pipe_name@entry=0x0) at ../gst/gstpluginloader.c:596 #25 0x00005555555551db in main (argc=<optimized out>, argv=<optimized out>) at ../libs/gst/helpers/gst-plugin-scanner.c:81 [Testcase] Start a fresh VM. Make sure the session is using X Server. $ sudo apt install gstreamer1.0-vaapi gstreamer1.0-tools $ gst-inspect-1.0 On plucky, you don't even need to run gst-inspect-1.0, just try log in, you will quickly find that xserver is broken and you aren't getting a X session today. Review the backtrace in /var/log/syslog. If you install a test package from the following ppa, the issue does not occur: https://launchpad.net/~mruffell/+archive/ubuntu/sf392117-test [Where problems could occur] We are adding some protection on the xserver side against user-space applications that incorrectly do not call DRI2ScreenInit() before attempting to construct a window. It would be best if all applications would call DRI2ScreenInit(), but if an applications don't, then we need to not crash the entire xserver. Regressions could occur in unintended behaviour for applications that can get away without calling DRI2ScreenInit(), but those applications will likely just continue working as usual. If a regression were to occur, it would occur when launching applications in Xorg desktop environments. [Other Info] Duplicate Bugs -------------- At the time of writing the primary Launchpad bug has 19 duplicate bugs, which is the most I have ever seen, so this bug impacts a large amount of people. Upstream Bugs ------------- https://gitlab.freedesktop.org/xorg/xserver/-/issues/1053 https://gitlab.freedesktop.org/xorg/xserver/-/issues/1340 https://gitlab.freedesktop.org/xorg/xserver/-/issues/1534 https://lists.x.org/archives/xorg-devel/2024-September/059318.html Downstream Bugs --------------- https://bugs.gentoo.org/841662 Merge Request and Fix --------------------- https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1608 commit 07931601759be31b86892fd1485bc127edadf65e From: Doug Brown <d...@schmorgal.com> Date: Mon, 15 Jul 2024 19:44:23 -0700 Subject: dri2: Protect against dri2ClientPrivate assertion failures Link: https://gitlab.freedesktop.org/xorg/xserver/-/commit/07931601759be31b86892fd1485bc127edadf65e?merge_request_iid=1608 NOTE THIS IS NOT MERGED UPSTREAM, AND WILL BE VENDORED TO UBUNTU. See reasons below. The State of Upstream xserver ----------------------------- Upstream xserver is on essential life-support maintenance at the moment. No one is interested in reviewing or merging the merge request, after repeated messages to the issue, merge quest, and development mailing list. If you review: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1757 Then it becomes clear there are many other open merge requests waiting for attention, and the only person who seems interested in these, Enrico Weigelt, comments and gives attention, but he cannot merge due to not being a maintainer, and the maintainers are being a little rude to him in that particular issue. In short, this patch would have a big impact on the stability of xserver users on Ubuntu, and we should just vendor this patch. To manage notifications about this bug go to: https://bugs.launchpad.net/xorg-server/+bug/1861609/+subscriptions -- Mailing list: https://launchpad.net/~desktop-packages Post to : desktop-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~desktop-packages More help : https://help.launchpad.net/ListHelp