From 9b983fecf999b9f50946973f2379a5ce00491cad Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 30 Jan 2024 10:44:58 +1000 Subject: [PATCH] dix: don't push the XKB state to a non-existing master keyboard If our master keyboard is disabled, GetMaster() returns NULL and we segfault in XkbPushLockedStateToSlaves(). Fixes 45fb3a934dc0db51584aba37c2f9d73deff9191d Fixes #1611 Part-of: --- dix/devices.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dix/devices.c b/dix/devices.c index 48f701be3..b4b15a159 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -2699,11 +2699,14 @@ AttachDevice(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr master) dev->spriteInfo->paired = dev; } else { + DeviceIntPtr keyboard = GetMaster(dev, MASTER_KEYBOARD); + dev->spriteInfo->sprite = master->spriteInfo->sprite; dev->spriteInfo->paired = master; dev->spriteInfo->spriteOwner = FALSE; - XkbPushLockedStateToSlaves(GetMaster(dev, MASTER_KEYBOARD), 0, 0); + if (keyboard) + XkbPushLockedStateToSlaves(keyboard, 0, 0); RecalculateMasterButtons(master); }