summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Fourdan <ofourdan@redhat.com>2021-02-15 11:33:56 +0100
committerOlivier Fourdan <ofourdan@redhat.com>2021-02-16 09:37:46 +0100
commitdee2bb033e78e2f4aae7f5708c3d4fc74a9957de (patch)
tree772e36333a49b39d49c0d80f45083b2580cfb927
parentab76272a7d2bff997985893c89147412a7360310 (diff)
dix: Guard against non-existing PtrFeedbackPtr
Trying to change the pointer control settings on a device without PtrFeedbackPtr would be a bug and a crash in the Xserver. Guard against that case by returning early with a BadImplementation error, that might kill the X11 client but the Xserver would survive. Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Related: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1137
-rw-r--r--dix/devices.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/dix/devices.c b/dix/devices.c
index 0ab9f37c2..85d899c20 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -2257,6 +2257,9 @@ ProcChangePointerControl(ClientPtr client)
REQUEST(xChangePointerControlReq);
REQUEST_SIZE_MATCH(xChangePointerControlReq);
+ /* If the device has no PtrFeedbackPtr, the xserver has a bug */
+ BUG_RETURN_VAL (!mouse->ptrfeed, BadImplementation);
+
ctrl = mouse->ptrfeed->ctrl;
if ((stuff->doAccel != xTrue) && (stuff->doAccel != xFalse)) {
client->errorValue = stuff->doAccel;