Commit 04b4b88c authored by Vadim Zaliva's avatar Vadim Zaliva Committed by Dmitry Torokhov

Input: appletouch - fix integer overflow issue

When reading data from Geyser 2 touchpads used on post Oct 2005 Apple
PowerBooks the driver was casting X and Y coordinates values to
'signed char'. Testing on one of such PowerBooks I have noticed that
touchpad always generates positive values, but some of them are greater
that 127, and thus, when cast to 'signed char' being interpreted as
a negative.

Such bigger values have been observed infrequently, closer to the
edges of a touchpad, so the problem was not very visible.
Nevertheless, the patch would potentially improve touchpad
driver accuracy.
Signed-off-by: default avatarVadim Zaliva <lord@crocodile.org>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 4eb6f91b
...@@ -205,8 +205,8 @@ struct atp { ...@@ -205,8 +205,8 @@ struct atp {
bool overflow_warned; bool overflow_warned;
int x_old; /* last reported x/y, */ int x_old; /* last reported x/y, */
int y_old; /* used for smoothing */ int y_old; /* used for smoothing */
signed char xy_cur[ATP_XSENSORS + ATP_YSENSORS]; u8 xy_cur[ATP_XSENSORS + ATP_YSENSORS];
signed char xy_old[ATP_XSENSORS + ATP_YSENSORS]; u8 xy_old[ATP_XSENSORS + ATP_YSENSORS];
int xy_acc[ATP_XSENSORS + ATP_YSENSORS]; int xy_acc[ATP_XSENSORS + ATP_YSENSORS];
int idlecount; /* number of empty packets */ int idlecount; /* number of empty packets */
struct work_struct work; struct work_struct work;
...@@ -531,7 +531,7 @@ static void atp_complete_geyser_1_2(struct urb *urb) ...@@ -531,7 +531,7 @@ static void atp_complete_geyser_1_2(struct urb *urb)
for (i = 0; i < ATP_XSENSORS + ATP_YSENSORS; i++) { for (i = 0; i < ATP_XSENSORS + ATP_YSENSORS; i++) {
/* accumulate the change */ /* accumulate the change */
signed char change = dev->xy_old[i] - dev->xy_cur[i]; int change = dev->xy_old[i] - dev->xy_cur[i];
dev->xy_acc[i] -= change; dev->xy_acc[i] -= change;
/* prevent down drifting */ /* prevent down drifting */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment