mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-08 13:29:45 -05:00
wl_resource_for_each_safe isn't safe to use here because it accesses
the list's head memory one last time at the end of the loop. Work
around this by breaking out early.
==19880==ERROR: AddressSanitizer: heap-use-after-free on address 0x60d0000e6368 at pc 0x7fab68619de2 bp 0x7ffd5c91cee0 sp 0x7ffd5c91ced0
READ of size 8 at 0x60d0000e6368 thread T0
#0 0x7fab68619de1 in wlr_seat_destroy ../types/seat/wlr_seat.c:179
#1 0x7fab68619fb9 in handle_display_destroy ../types/seat/wlr_seat.c:196
#2 0x7fab688e4f8f in wl_priv_signal_emit src/wayland-server.c:2024
#3 0x7fab688e56ca in wl_display_destroy src/wayland-server.c:1092
#4 0x40c11e in server_fini ../sway/server.c:138
#5 0x40b1a8 in main ../sway/main.c:438
#6 0x7fab67b5e18a in __libc_start_main ../csu/libc-start.c:308
#7 0x409359 in _start (/opt/wayland/bin/sway+0x409359)
0x60d0000e6368 is located 24 bytes inside of 144-byte region [0x60d0000e6350,0x60d0000e63e0)
freed by thread T0 here:
#0 0x7fab6a7d6880 in __interceptor_free (/lib64/libasan.so.5+0xee880)
#1 0x7fab68619805 in seat_client_handle_resource_destroy ../types/seat/wlr_seat.c:97
#2 0x7fab688e5025 in destroy_resource src/wayland-server.c:688
previously allocated by thread T0 here:
#0 0x7fab6a7d6e50 in calloc (/lib64/libasan.so.5+0xeee50)
#1 0x7fab686198df in seat_handle_bind ../types/seat/wlr_seat.c:127
#2 0x7fab6530503d in ffi_call_unix64 (/lib64/libffi.so.6+0x603d)
|
||
|---|---|---|
| .. | ||
| data_device | ||
| seat | ||
| xdg_shell | ||
| xdg_shell_v6 | ||
| meson.build | ||
| wlr_box.c | ||
| wlr_buffer.c | ||
| wlr_compositor.c | ||
| wlr_cursor.c | ||
| wlr_export_dmabuf_v1.c | ||
| wlr_gamma_control.c | ||
| wlr_idle.c | ||
| wlr_idle_inhibit_v1.c | ||
| wlr_input_device.c | ||
| wlr_input_inhibitor.c | ||
| wlr_keyboard.c | ||
| wlr_layer_shell.c | ||
| wlr_linux_dmabuf.c | ||
| wlr_list.c | ||
| wlr_matrix.c | ||
| wlr_output.c | ||
| wlr_output_damage.c | ||
| wlr_output_layout.c | ||
| wlr_pointer.c | ||
| wlr_primary_selection.c | ||
| wlr_region.c | ||
| wlr_screencopy_v1.c | ||
| wlr_screenshooter.c | ||
| wlr_server_decoration.c | ||
| wlr_surface.c | ||
| wlr_tablet_pad.c | ||
| wlr_tablet_tool.c | ||
| wlr_touch.c | ||
| wlr_virtual_keyboard_v1.c | ||
| wlr_wl_shell.c | ||
| wlr_xcursor_manager.c | ||
| wlr_xdg_output.c | ||