Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ppp: mppe: discard late packet in stateless mode

When PPP is used over a link which does not guarantee packet ordering,
we might get late MPPE packets. This is a problem because MPPE must be
kept synchronized and the current implementation does not drop them and
rekey 4095 times instead of 0, which is wrong.

In order to prevent rekeying about a whole count space times (~ 4095
times), drop packets which are not within the forward 4096/2 window and
increase sanity error counter.

Signed-off-by: Sylvain Rochet <sylvain.rochet@finsecur.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Sylvain Rochet and committed by
David S. Miller
03654763 32530189

+7
+7
drivers/net/ppp/ppp_mppe.c
··· 533 533 */ 534 534 535 535 if (!state->stateful) { 536 + /* Discard late packet */ 537 + if ((ccount - state->ccount) % MPPE_CCOUNT_SPACE 538 + > MPPE_CCOUNT_SPACE / 2) { 539 + state->sanity_errors++; 540 + goto sanity_error; 541 + } 542 + 536 543 /* RFC 3078, sec 8.1. Rekey for every packet. */ 537 544 while (state->ccount != ccount) { 538 545 mppe_rekey(state, 0);