From 734b8ac8051a7fc4ac53d9e3843f0a8cdc8e530e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Thu, 29 Jun 2023 20:19:04 +0200 Subject: [PATCH] 5.4-stable patches added patches: hid-wacom-use-ktime_t-rather-than-int-when-dealing-with-timestamps.patch --- ...han-int-when-dealing-with-timestamps.patch | 70 +++++++++++++++++++ queue-5.4/series | 1 + 2 files changed, 71 insertions(+) create mode 100644 queue-5.4/hid-wacom-use-ktime_t-rather-than-int-when-dealing-with-timestamps.patch diff --git a/queue-5.4/hid-wacom-use-ktime_t-rather-than-int-when-dealing-with-timestamps.patch b/queue-5.4/hid-wacom-use-ktime_t-rather-than-int-when-dealing-with-timestamps.patch new file mode 100644 index 00000000000..717dded5790 --- /dev/null +++ b/queue-5.4/hid-wacom-use-ktime_t-rather-than-int-when-dealing-with-timestamps.patch @@ -0,0 +1,70 @@ +From 9a6c0e28e215535b2938c61ded54603b4e5814c5 Mon Sep 17 00:00:00 2001 +From: Jason Gerecke +Date: Thu, 8 Jun 2023 14:38:28 -0700 +Subject: HID: wacom: Use ktime_t rather than int when dealing with timestamps + +From: Jason Gerecke + +commit 9a6c0e28e215535b2938c61ded54603b4e5814c5 upstream. + +Code which interacts with timestamps needs to use the ktime_t type +returned by functions like ktime_get. The int type does not offer +enough space to store these values, and attempting to use it is a +recipe for problems. In this particular case, overflows would occur +when calculating/storing timestamps leading to incorrect values being +reported to userspace. In some cases these bad timestamps cause input +handling in userspace to appear hung. + +Link: https://gitlab.freedesktop.org/libinput/libinput/-/issues/901 +Fixes: 17d793f3ed53 ("HID: wacom: insert timestamp to packed Bluetooth (BT) events") +CC: stable@vger.kernel.org +Signed-off-by: Jason Gerecke +Reviewed-by: Benjamin Tissoires +Link: https://lore.kernel.org/r/20230608213828.2108-1-jason.gerecke@wacom.com +Signed-off-by: Benjamin Tissoires +Signed-off-by: Greg Kroah-Hartman +--- + drivers/hid/wacom_wac.c | 6 +++--- + drivers/hid/wacom_wac.h | 2 +- + 2 files changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/hid/wacom_wac.c ++++ b/drivers/hid/wacom_wac.c +@@ -1307,7 +1307,7 @@ static void wacom_intuos_pro2_bt_pen(str + struct input_dev *pen_input = wacom->pen_input; + unsigned char *data = wacom->data; + int number_of_valid_frames = 0; +- int time_interval = 15000000; ++ ktime_t time_interval = 15000000; + ktime_t time_packet_received = ktime_get(); + int i; + +@@ -1341,7 +1341,7 @@ static void wacom_intuos_pro2_bt_pen(str + if (number_of_valid_frames) { + if (wacom->hid_data.time_delayed) + time_interval = ktime_get() - wacom->hid_data.time_delayed; +- time_interval /= number_of_valid_frames; ++ time_interval = div_u64(time_interval, number_of_valid_frames); + wacom->hid_data.time_delayed = time_packet_received; + } + +@@ -1352,7 +1352,7 @@ static void wacom_intuos_pro2_bt_pen(str + bool range = frame[0] & 0x20; + bool invert = frame[0] & 0x10; + int frames_number_reversed = number_of_valid_frames - i - 1; +- int event_timestamp = time_packet_received - frames_number_reversed * time_interval; ++ ktime_t event_timestamp = time_packet_received - frames_number_reversed * time_interval; + + if (!valid) + continue; +--- a/drivers/hid/wacom_wac.h ++++ b/drivers/hid/wacom_wac.h +@@ -320,7 +320,7 @@ struct hid_data { + int bat_connected; + int ps_connected; + bool pad_input_event_flag; +- int time_delayed; ++ ktime_t time_delayed; + }; + + struct wacom_remote_data { diff --git a/queue-5.4/series b/queue-5.4/series index c6462b0d751..4d4e1a60523 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -3,3 +3,4 @@ x86-microcode-amd-load-late-on-both-threads-too.patch x86-smp-use-dedicated-cache-line-for-mwait_play_dead.patch video-imsttfb-check-for-ioremap-failures.patch fbdev-imsttfb-fix-use-after-free-bug-in-imsttfb_probe.patch +hid-wacom-use-ktime_t-rather-than-int-when-dealing-with-timestamps.patch -- 2.47.3