psm(4): Fix panic occuring soon after PS/2 packet has been rejected by
synaptics or elantech sanity checker. After packet has been rejected contents of packet buffer is not cleared with setting of inputbytes counter to 0. So when this packet buffer is filled again being an element of circular queue, new data appends to old data rather than overwrites it. This leads to packet buffer overflow after 10 rounds. Fix it with setting of packet's inputbytes counter to 0 after rejection. While here add extra logging of rejected packets. PR: 222667 (for reference) Reported by: Neel Chauhan <neel@neelc.org> Tested by: Neel Chauhan <neel@neelc.org> MFC after: 1 week
This commit is contained in:
parent
68a574863d
commit
74a53bd131
@ -4935,13 +4935,19 @@ psmsoftintr(void *arg)
|
||||
break;
|
||||
|
||||
case MOUSE_MODEL_SYNAPTICS:
|
||||
if (proc_synaptics(sc, pb, &ms, &x, &y, &z) != 0)
|
||||
if (proc_synaptics(sc, pb, &ms, &x, &y, &z) != 0) {
|
||||
VLOG(3, (LOG_DEBUG, "synaptics: "
|
||||
"packet rejected\n"));
|
||||
goto next;
|
||||
}
|
||||
break;
|
||||
|
||||
case MOUSE_MODEL_ELANTECH:
|
||||
if (proc_elantech(sc, pb, &ms, &x, &y, &z) != 0)
|
||||
if (proc_elantech(sc, pb, &ms, &x, &y, &z) != 0) {
|
||||
VLOG(3, (LOG_DEBUG, "elantech: "
|
||||
"packet rejected\n"));
|
||||
goto next;
|
||||
}
|
||||
break;
|
||||
|
||||
case MOUSE_MODEL_TRACKPOINT:
|
||||
@ -5037,9 +5043,9 @@ psmsoftintr(void *arg)
|
||||
sizeof(sc->queue.buf);
|
||||
sc->queue.count += pb->inputbytes;
|
||||
}
|
||||
pb->inputbytes = 0;
|
||||
|
||||
next:
|
||||
pb->inputbytes = 0;
|
||||
if (++sc->pqueue_start >= PSM_PACKETQUEUE)
|
||||
sc->pqueue_start = 0;
|
||||
} while (sc->pqueue_start != sc->pqueue_end);
|
||||
|
Loading…
Reference in New Issue
Block a user