Skip to contentSkip to conversation

Input: refuse to register absolute devices without absinfo

PATCH In review Dmitry Torokhov 3 participants 3 messages Jan 31, 2017 – Feb 1, 2017

Subsystems (2)
lore
Share & tools
lore

Dmitry Torokhov

author maintainer
#0 lore raw

PATCH 1/1 Input: refuse to register absolute devices without absinfo

If device is supposed to send absolute events (i.e. EV_ABS bit is set in dev->evbit) but dev->absinfo is not allocated, then the driver has done something wrong, and we should not register such device. Otherwise we'll crash later, when driver tries to send absolute event.

---
 drivers/input/input.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/input/input.c +6 -0
index f0d2d45a68e3..4617f2db9e36 100644
@@ -2095,6 +2095,12 @@ int input_register_device(struct input_dev *dev)
 	const char *path;
 	int error;
 
+	if (test_bit(EV_ABS, dev->evbit) && !dev->absinfo) {
+		dev_err(&dev->dev,
+			"Absolute device without dev->absinfo, refusing to register\n");
+		return -EINVAL;
+	}
+
 	if (dev->devres_managed) {
 		devres = devres_alloc(devm_input_device_unregister,
 				      sizeof(struct input_devres), GFP_KERNEL);
Signature · 5 lines
2.11.0.483.g087da7b7c-goog


-- 
Dmitry
Reviewed-by on v1 1/1
#1 lore raw
Quoted 7 lines · Dmitry Torokhov

If device is supposed to send absolute events (i.e. EV_ABS bit is set in dev->evbit) but dev->absinfo is not allocated, then the driver has done something wrong, and we should not register such device. Otherwise we'll crash later, when driver tries to send absolute event.

---

Looks good to me:

Cheers,
Benjamin

Quoted 26 lines
 drivers/input/input.c | 6 ++++++
 1 file changed, 6 insertions(+)
drivers/input/input.c +6 -0
index f0d2d45a68e3..4617f2db9e36 100644
@@ -2095,6 +2095,12 @@ int input_register_device(struct input_dev *dev)
 	const char *path;
 	int error;
 
+	if (test_bit(EV_ABS, dev->evbit) && !dev->absinfo) {
+		dev_err(&dev->dev,
+			"Absolute device without dev->absinfo, refusing to register\n");
+		return -EINVAL;
+	}
+
 	if (dev->devres_managed) {
 		devres = devres_alloc(devm_input_device_unregister,
 				      sizeof(struct input_devres), GFP_KERNEL);
Signature · 5 lines
2.11.0.483.g087da7b7c-goog


-- 
Dmitry
maintainer Acked-by on v1 1/1
#2 lore raw
In reply to Dmitry Torokhov
Quoted 6 lines · Dmitry Torokhov

If device is supposed to send absolute events (i.e. EV_ABS bit is set in dev->evbit) but dev->absinfo is not allocated, then the driver has done something wrong, and we should not register such device. Otherwise we'll crash later, when driver tries to send absolute event.

Thanks.

Signature · 2 lines
Jiri Kosina
SUSE Labs