HID: wacom: check input_dev->absinfo in wacom_bpt3_touch_msg

Started by Yiyuan GUO on May 17, 2021 · 4 messages from 4 authors · Last reply Jun 3, 2021

Subsystems (3)

Maintainers (5)

Show 1 more
STALE1990d

open the first message on its own page

Message details and related content
The function wacom_bpt3_touch_msg calls input_abs_get_res(input,
ABS_MT_POSITION_X) to obtain x_res, which may equal to 0 if
input->absinfo is NULL. Since x_res is used as a divisor, this
may lead to divide by zero problem.

Signed-off-by: Yiyuan GUO <redacted>
---
 drivers/hid/wacom_wac.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 81d7d12bc..a5a6fb8bc 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2892,7 +2892,7 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
 	bool touch = data[1] & 0x80;
 	int slot = input_mt_get_slot_by_key(input, data[0]);
 
-	if (slot < 0)
+	if (slot < 0 || !input->absinfo)
 		return;
 
 	touch = touch && report_touch_events(wacom);
-- 
2.25.1
Message details and related content
On Mon, 17 May 2021, Yiyuan GUO wrote:
quoted hunk
The function wacom_bpt3_touch_msg calls input_abs_get_res(input,
ABS_MT_POSITION_X) to obtain x_res, which may equal to 0 if
input->absinfo is NULL. Since x_res is used as a divisor, this
may lead to divide by zero problem.

Signed-off-by: Yiyuan GUO <redacted>
---
 drivers/hid/wacom_wac.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 81d7d12bc..a5a6fb8bc 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2892,7 +2892,7 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
 	bool touch = data[1] & 0x80;
 	int slot = input_mt_get_slot_by_key(input, data[0]);
 
-	if (slot < 0)
+	if (slot < 0 || !input->absinfo)
 		return;
 
 	touch = touch && report_touch_events(wacom);
CCing Wacom driver maintainers in order to get their ack.

-- 
Jiri Kosina
SUSE Labs
Message details and related content
From: Jiri Kosina <jikos@kernel.org>
 
On Mon, 17 May 2021, Yiyuan GUO wrote:
quoted
The function wacom_bpt3_touch_msg calls input_abs_get_res(input,
ABS_MT_POSITION_X) to obtain x_res, which may equal to 0 if
input->absinfo is NULL. Since x_res is used as a divisor, this
may lead to divide by zero problem.

Signed-off-by: Yiyuan GUO <redacted>
---
 drivers/hid/wacom_wac.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 81d7d12bc..a5a6fb8bc 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2892,7 +2892,7 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
      bool touch = data[1] & 0x80;
      int slot = input_mt_get_slot_by_key(input, data[0]);

-     if (slot < 0)
+     if (slot < 0 || !input->absinfo)
              return;

      touch = touch && report_touch_events(wacom);
CCing Wacom driver maintainers in order to get their ack.

--
Jiri Kosina
SUSE Labs
A NULL input->absinfo is very much an unexpected condition. We've either failed somewhere during setup or things have gone off the rails afterwards. Silently limping along like this is a bad idea. I'd really like to see an error message logged and the device removed if possible.

Jason Gerecke
Message details and related content
On Fri, May 28, 2021 at 02:19:37PM +0000, Gerecke, Jason wrote:
From: Jiri Kosina <jikos@kernel.org>
quoted
 
On Mon, 17 May 2021, Yiyuan GUO wrote:
quoted
The function wacom_bpt3_touch_msg calls input_abs_get_res(input,
ABS_MT_POSITION_X) to obtain x_res, which may equal to 0 if
input->absinfo is NULL. Since x_res is used as a divisor, this
may lead to divide by zero problem.

Signed-off-by: Yiyuan GUO <redacted>
---
 drivers/hid/wacom_wac.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 81d7d12bc..a5a6fb8bc 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -2892,7 +2892,7 @@ static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
      bool touch = data[1] & 0x80;
      int slot = input_mt_get_slot_by_key(input, data[0]);

-     if (slot < 0)
+     if (slot < 0 || !input->absinfo)
              return;

      touch = touch && report_touch_events(wacom);
CCing Wacom driver maintainers in order to get their ack.

--
Jiri Kosina
SUSE Labs
A NULL input->absinfo is very much an unexpected condition. We've
either failed somewhere during setup or things have gone off the rails
afterwards. Silently limping along like this is a bad idea. I'd really
like to see an error message logged and the device removed if
possible.
Input core (input_register_device) will refuse registering an input
device claiming to be absolute (EV_ABS present in dev->absbit) but not
having dev->absinfo allocated, so this is not going to happen in real
life.

Thanks.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help