hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/drivers/input/mouse/elantech.c
....@@ -674,10 +674,11 @@
674674 struct input_dev *dev = psmouse->dev;
675675 struct elantech_data *etd = psmouse->private;
676676 unsigned char *packet = psmouse->packet;
677
- int id = ((packet[3] & 0xe0) >> 5) - 1;
677
+ int id;
678678 int pres, traces;
679679
680
- if (id < 0)
680
+ id = ((packet[3] & 0xe0) >> 5) - 1;
681
+ if (id < 0 || id >= ETP_MAX_FINGERS)
681682 return;
682683
683684 etd->mt[id].x = ((packet[1] & 0x0f) << 8) | packet[2];
....@@ -707,7 +708,7 @@
707708 int id, sid;
708709
709710 id = ((packet[0] & 0xe0) >> 5) - 1;
710
- if (id < 0)
711
+ if (id < 0 || id >= ETP_MAX_FINGERS)
711712 return;
712713
713714 sid = ((packet[3] & 0xe0) >> 5) - 1;
....@@ -728,7 +729,7 @@
728729 input_report_abs(dev, ABS_MT_POSITION_X, etd->mt[id].x);
729730 input_report_abs(dev, ABS_MT_POSITION_Y, etd->mt[id].y);
730731
731
- if (sid >= 0) {
732
+ if (sid >= 0 && sid < ETP_MAX_FINGERS) {
732733 etd->mt[sid].x += delta_x2 * weight;
733734 etd->mt[sid].y -= delta_y2 * weight;
734735 input_mt_slot(dev, sid);