gnome-shell (wayland) occasionally segfaults on resume from suspend in wl_closure_invoke()
Affected version
- Version: Arch Linux with gnome-shell 43.2-1, mutter 43.2-1, wayland 1.21.0-2
- XOrg or Wayland: Wayland, as the backtrace shows that it crashes in wl_closure_invoke() of wayland
- Extensions: Not sure, as this bug happens occasionally.
Bug summary
Gnome-shell (wayland) segfaults when resuming from suspend. It's frustrating as the whole wayland session dies along with gnome-shell.
Steps to reproduce
- Start a new gnome-shell wayland session with gdm
- Use for a few days
- Suspend with laptop lid closed
- It may crashes when opening the lid and resuming
What happened
SIGSEGV
What did you expect to happen
Login as normal
Relevant logs, screenshots, screencasts etc.
(gdb) bt full
#0 0x00007f1423fcfaba in wl_closure_invoke (closure=closure@entry=0x555bdba8f480, target=<optimized out>, target@entry=0x555bdc2b46e0, opcode=opcode@entry=0, data=<optimized out>,
data@entry=0x555bdfc36f30, flags=2) at ../wayland-1.21.0/src/connection.c:1021
count = <optimized out>
cif = {abi = FFI_UNIX64, nargs = 2, arg_types = 0x7ffc5ef63520, rtype = 0x7f14227df1a0 <ffi_type_void>, bytes = 0, flags = 0}
ffi_types = {0x7f14227df2a0 <ffi_type_pointer>, 0x7f14227df2a0 <ffi_type_pointer>, 0x7f14227df240 <ffi_type_uint32>, 0x7f14227df2a0 <ffi_type_pointer>, 0x7f14227df240 <ffi_type_uint32>, 0x7f14227df240 <ffi_type_uint32>, 0x7f14227df330 <ffi_type_sint32>, 0x7f14227df240 <ffi_type_uint32>, 0xfffe0c1a87bf2430, 0x55010000fb05, 0xd709d96257c7ce00, 0x555bdae63080, 0x0, 0xfffa000000000000, 0x555bdae63080, 0x7ffc5ef63780, 0x555bdae630e8, 0x7f1421a7007c, 0x7f14231f1ba0, 0x7f141ff4d02e <std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::swap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)+190>, 0xb, 0x7f141ff3fe3e <std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long)+190>}
ffi_args = {0x7ffc5ef634e0, 0x7ffc5ef634e8, 0x555be3f06618, 0x555bdf14a810, 0x555bdf14a818, 0x555bdf14a820, 0x555bdfdf78f8, 0x555bdfdf7900, 0x7632ca7f5f0, 0x7f1423fd1471 <log_closure+81>, 0x555be5bdb5f0, 0x555bdb078790, 0x7f14231f1ba0, 0x0, 0x555be3f06600, 0x7f14230b0416 <calloc+214>, 0x7ffc5ef63688, 0xd709d96257c7ce00, 0x7f1421f66c20, 0x7f1423fd66d7, 0x7f1423fdad90 <wl_output_requests>, 0x0}
implementation = 0x0
#1 0x00007f1423fd401c in wl_client_connection_data (fd=<optimized out>, mask=<optimized out>, data=<optimized out>) at ../wayland-1.21.0/src/wayland-server.c:437
client = <optimized out>
connection = <optimized out>
resource = 0x555bdc2b46e0
object = 0x555bdc2b46e0
closure = 0x555bdba8f480
message = 0x7f1423fdad90 <wl_output_requests>
p = {13, 524288}
resource_flags = 0
opcode = 0
size = <optimized out>
since = <optimized out>
len = <optimized out>
#2 0x00007f1423fd29e2 in wl_event_loop_dispatch (loop=0x555bdb078880, timeout=timeout@entry=0) at ../wayland-1.21.0/src/event-loop.c:1027
ep = {{events = 1, data = {ptr = 0x555be05e2430, fd = -530701264, u32 = 3764266032, u64 = 93853094650928}}, {events = 1, data = {ptr = 0x555bdcf80c50, fd = -587723696, u32 = 3707243600, u64 = 93853037628496}}, {events = 1, data = {ptr = 0x555be0556800, fd = -531273728, u32 = 3763693568, u64 = 93853094078464}}, {events = 1, data = {ptr = 0x555bdd24aec0, fd = -584798528, u32 = 3710168768, u64 = 93853040553664}}, {events = 1, data = {ptr = 0x555bdd21ea30, fd = -584979920, u32 = 3709987376, u64 = 93853040372272}}, {events = 1, data = {ptr = 0x555bdd21f510, fd = -584977136, u32 = 3709990160, u64 = 93853040375056}}, {events = 1, data = {ptr = 0x555bdd243a70, fd = -584828304, u32 = 3710138992, u64 = 93853040523888}}, {events = 1, data = {ptr = 0x555bdb030df0, fd = -620556816, u32 = 3674410480, u64 = 93853004795376}}, {events = 1, data = {ptr = 0x555bdd223c20, fd = -584958944, u32 = 3710008352, u64 = 93853040393248}}, {events = 1, data = {ptr = 0x555be07d6740, fd = -528652480, u32 = 3766314816, u64 = 93853096699712}}, {events = 1, data = {ptr = 0x555be044cda0, fd = -532361824, u32 = 3762605472, u64 = 93853092990368}}, {events = 1, data = {ptr = 0x555be00b9aa0, fd = -536110432, u32 = 3758856864, u64 = 93853089241760}}, {events = 1, data = {ptr = 0x555bdd1dd9e0, fd = -585246240, u32 = 3709721056, u64 = 93853040105952}}, {events = 1, data = {ptr = 0x555bdfa92e70, fd = -542560656, u32 = 3752406640, u64 = 93853082791536}}, {events = 1, data = {ptr = 0x555bdd216790, fd = -585013360, u32 = 3709953936, u64 = 93853040338832}}, {events = 1, data = {ptr = 0x555bdf9d4530, fd = -543341264, u32 = 3751626032, u64 = 93853082010928}}, {events = 1, data = {ptr = 0x555be01ed740, fd = -534849728, u32 = 3760117568, u64 = 93853090502464}}, {events = 32532, data = {ptr = 0x3000000028, fd = 40, u32 = 40, u64 = 206158430248}}, {events = 1593195136, data = {ptr = 0x5ef639c000007ffc, fd = 32764, u32 = 32764, u64 = 6842720180632584188}}, {events = 32764, data = {ptr = 0xd709d96257c7ce00, fd = 1472712192, u32 = 1472712192, u64 = 15495155009347636736}}, {events = 1593194960, data = {ptr = 0x57c7ce0000007ffc, fd = 32764, u32 = 32764, u64 = 6325250701060505596}}, {events = 3607746914, data = {ptr = 0x555bdd90cf80, fd = -577712256, u32 = 3717255040, u64 = 93853047639936}}, {events = 1, data = {ptr = 0x5ef63af000000000, fd = 0, u32 = 0, u64 = 6842721486302609408}}, {events = 32764, data = {ptr = 0x7f142414a922, fd = 605333794, u32 = 605333794, u64 = 139724481407266}}, {events = 3753398768, data = {ptr = 0xdf74af800000555b, fd = 21851, u32 = 21851, u64 = 16101687532047062363}}, {events = 21851, data = {ptr = 0x7ffc5ef63a20, fd = 1593195040, u32 = 1593195040, u64 = 140721901681184}}, {events = 582990658, data = {ptr = 0x5ef63b9800007f14, fd = 32532, u32 = 32532, u64 = 6842722207857147668}}, {events = 32764, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x2311010400000000, fd = 0, u32 = 0, u64 = 2526801982623055872}}, {events = 32532, data = {ptr = 0x7f14241cf4c0 <private_thread_memory>, fd = 605877440, u32 = 605877440, u64 = 139724481950912}}, {events = 8, data = {ptr = 0x5ef63a6000000000, fd = 0, u32 = 0, u64 = 6842720867827318784}}, {events = 32764, data = {ptr = 0x8, fd = 8, u32 = 8, u64 = 8}}}
source = <optimized out>
i = 15
count = <optimized out>
has_timers = <optimized out>
#3 0x00007f142336495d in wayland_event_source_dispatch (base=<optimized out>, callback=<optimized out>, data=<optimized out>) at ../mutter/src/wayland/meta-wayland.c:110
source = <optimized out>
loop = <optimized out>
#4 0x00007f14240e787b in g_main_dispatch (context=0x555bdaa92ab0) at ../glib/glib/gmain.c:3454
dispatch = 0x7f1423364940 <wayland_event_source_dispatch>
prev_source = 0x0
begin_time_nsec = 453098225950725
was_in_call = 0
user_data = 0x0
callback = 0x0
cb_funcs = 0x0
cb_data = 0x0
need_destroy = <optimized out>
source = 0x555bdb078970
current = 0x555bdaa88980
i = 0
#5 g_main_context_dispatch (context=0x555bdaa92ab0) at ../glib/glib/gmain.c:4172
#6 0x00007f142413ec89 in g_main_context_iterate.constprop.0 (context=0x555bdaa92ab0, block=1, dispatch=1, self=<optimized out>) at ../glib/glib/gmain.c:4248
max_priority = 115
timeout = 0
some_ready = 1
nfds = 25
allocated_nfds = <optimized out>
fds = <optimized out>
begin_time_nsec = 453098225457442
#7 0x00007f14240e6ddf in g_main_loop_run (loop=0x555bdc98a640) at ../glib/glib/gmain.c:4448
__func__ = "g_main_loop_run"
#8 0x00007f14232d0d0b in meta_context_run_main_loop (context=<optimized out>, error=0x7ffc5ef63c70) at ../mutter/src/core/meta-context.c:465
priv = 0x555bdaa8e050
__func__ = "meta_context_run_main_loop"
#9 0x0000555bda63148d in ()
#10 0x00007f142303c290 in () at /usr/lib/libc.so.6
#11 0x00007f142303c34a in __libc_start_main () at /usr/lib/libc.so.6
#12 0x0000555bda631745 in ()
GDB also tells me that it crashes on ../wayland-1.21.0/src/connection.c:1021
. Looks like a NULL pointer dereference bug.
1021 if (!implementation[opcode]) {