From 5c32a4845354e59133b1d213928d8cee1b8691bd Mon Sep 17 00:00:00 2001 From: Brian Ashworth Date: Mon, 18 May 2020 17:52:13 -0400 Subject: input: fix reloading crash due to keyboard group configuring Keyboard group keyboards should not call sway_keyboard_configure. They do not have an input config and they derive their state from the keyboards within the group. For some reason, I got sway_keyboard_configure and seat_configure_keyboard mixed up and thought seat_reset_device called the latter. Calling sway_keyboard_configure with a keyboard group's keyboard is not supported and can cause issues. If any clients are listening to the ipc input event, a sigsegv will occur due to not every property - such as identifier - being wired up for keyboard group keyboard's. This also adds an assertion to sway_keyboard_configure to ensure that this does not occur in the future and any instances are quickly caught. --- sway/input/keyboard.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'sway/input/keyboard.c') diff --git a/sway/input/keyboard.c b/sway/input/keyboard.c index 1002698e..ba0e020c 100644 --- a/sway/input/keyboard.c +++ b/sway/input/keyboard.c @@ -853,6 +853,12 @@ void sway_keyboard_configure(struct sway_keyboard *keyboard) { struct wlr_input_device *wlr_device = keyboard->seat_device->input_device->wlr_device; + if (!sway_assert(!wlr_keyboard_group_from_wlr_keyboard(wlr_device->keyboard), + "sway_keyboard_configure should not be called with a " + "keyboard group's keyboard")) { + return; + } + struct xkb_keymap *keymap = sway_keyboard_compile_keymap(input_config, NULL); if (!keymap) { sway_log(SWAY_ERROR, "Failed to compile keymap. Attempting defaults"); -- cgit v1.2.3-54-g00ecf