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.

Signed-off-by: Dmitry Torokhov <[email protected]>
---
 drivers/input/input.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/input/input.c b/drivers/input/input.c
index f0d2d45a68e3..4617f2db9e36 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -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);
-- 
2.11.0.483.g087da7b7c-goog


-- 
Dmitry

Reply via email to