[PATCH libinput] tablet: reject mislabelled tablet devices

Peter Hutterer peter.hutterer at who-t.net
Mon Mar 7 05:01:28 UTC 2016


The HUION 580 has a "consumer control" event node that has an ABS_VOLUME, keys
and a REL_HWHEEL. It has the same VID/PID as the pen tablet and libwacom
labels it as ID_INPUT_TABLET. This causes a crash later when we try to init
pointer acceleration for a device that doesn't have axes.

https://bugzilla.redhat.com/show_bug.cgi?id=1314955

Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
This is only one half of the fix, the other half should go into libwacom to
not label this device as tablet to begin with. Still, not crashing on
mislabeled devices seems like a feature.

 src/evdev-tablet.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c
index 0f6fa2c..9fc38aa 100644
--- a/src/evdev-tablet.c
+++ b/src/evdev-tablet.c
@@ -1613,6 +1613,31 @@ tablet_init_left_handed(struct evdev_device *device)
 }
 
 static int
+tablet_reject_device(struct evdev_device *device)
+{
+	struct libevdev *evdev = device->evdev;
+	int rc = -1;
+
+	if (!libevdev_has_event_code(evdev, EV_ABS, ABS_X) ||
+	    !libevdev_has_event_code(evdev, EV_ABS, ABS_Y))
+		goto out;
+
+	if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOOL_PEN))
+		goto out;
+
+	rc = 0;
+
+out:
+	if (rc) {
+		log_bug_libinput(device->base.seat->libinput,
+				 "Device '%s' does not meet tablet criteria. "
+				 "Ignoring this device.\n",
+				 device->devname, device->devname);
+	}
+	return rc;
+}
+
+static int
 tablet_init(struct tablet_dispatch *tablet,
 	    struct evdev_device *device)
 {
@@ -1625,6 +1650,9 @@ tablet_init(struct tablet_dispatch *tablet,
 	tablet->current_tool_type = LIBINPUT_TOOL_NONE;
 	list_init(&tablet->tool_list);
 
+	if (tablet_reject_device(device))
+		return -1;
+
 	tablet_init_calibration(tablet, device);
 	tablet_init_proximity_threshold(tablet, device);
 	rc = tablet_init_accel(tablet, device);
-- 
2.5.0



More information about the wayland-devel mailing list