57dbbbe
From df3c65706eb169d5938df0052059f3e0d5981b74 Mon Sep 17 00:00:00 2001
57dbbbe
From: Peter Hutterer <peter.hutterer@who-t.net>
57dbbbe
Date: Thu, 21 Dec 2023 13:48:10 +1000
57dbbbe
Subject: [PATCH 4/9] Xi: when creating a new ButtonClass, set the number of
57dbbbe
 buttons
57dbbbe
57dbbbe
There's a racy sequence where a master device may copy the button class
57dbbbe
from the slave, without ever initializing numButtons. This leads to a
57dbbbe
device with zero buttons but a button class which is invalid.
57dbbbe
57dbbbe
Let's copy the numButtons value from the source - by definition if we
57dbbbe
don't have a button class yet we do not have any other slave devices
57dbbbe
with more than this number of buttons anyway.
57dbbbe
57dbbbe
CVE-2024-0229, ZDI-CAN-22678
57dbbbe
57dbbbe
This vulnerability was discovered by:
57dbbbe
Jan-Niklas Sohn working with Trend Micro Zero Day Initiative
57dbbbe
---
57dbbbe
 Xi/exevents.c | 1 +
57dbbbe
 1 file changed, 1 insertion(+)
57dbbbe
57dbbbe
diff --git a/Xi/exevents.c b/Xi/exevents.c
57dbbbe
index 54ea11a93..e16171468 100644
57dbbbe
--- a/Xi/exevents.c
57dbbbe
+++ b/Xi/exevents.c
57dbbbe
@@ -605,6 +605,7 @@ DeepCopyPointerClasses(DeviceIntPtr from, DeviceIntPtr to)
57dbbbe
                 to->button = calloc(1, sizeof(ButtonClassRec));
57dbbbe
                 if (!to->button)
57dbbbe
                     FatalError("[Xi] no memory for class shift.\n");
57dbbbe
+                to->button->numButtons = from->button->numButtons;
57dbbbe
             }
57dbbbe
             else
57dbbbe
                 classes->button = NULL;
57dbbbe
-- 
57dbbbe
2.43.0
57dbbbe