summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2001-07-07 03:06:20 +0000
committerbrian <brian@FreeBSD.org>2001-07-07 03:06:20 +0000
commitb93f87d791e865bb6a5283ac90965c9a938b901b (patch)
treec91da7123d333e41a965fa92769a19d3540cb8a3 /usr.sbin
parente388aaa8b05a09d13b1d34692e499a1b15545631 (diff)
downloadFreeBSD-src-b93f87d791e865bb6a5283ac90965c9a938b901b.zip
FreeBSD-src-b93f87d791e865bb6a5283ac90965c9a938b901b.tar.gz
When we miss one or more packets in stateful mode *and* need to
perform a key change, *and* our sequence numbers have wrapped, ensure that the number of key changes is calculated correctly. The previous code counted down from a negative number to zero, re-encrypting the current key on each iteration - this took some time and strangely enough got the answer wrong !!! Fix a(nother) spelling mistake while I'm there.
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/ppp/mppe.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/usr.sbin/ppp/mppe.c b/usr.sbin/ppp/mppe.c
index 891492b..f079660 100644
--- a/usr.sbin/ppp/mppe.c
+++ b/usr.sbin/ppp/mppe.c
@@ -70,12 +70,13 @@
#define MPPE_OPT_BITMASK 0xe0
#define MPPE_OPT_MASK (MPPE_OPT_STATELESS | MPPE_OPT_BITMASK)
-#define MPPE_FLUSHED 0x8000
-#define MPPE_ENCRYPTED 0x1000
-#define MPPE_HEADER_BITMASK 0xf000
-#define MPPE_HEADER_FLAG 0x00ff
-#define MPPE_HEADER_FLAGMASK 0x00ff
-#define MPPE_HEADER_FLAGSHIFT 8
+#define MPPE_FLUSHED 0x8000
+#define MPPE_ENCRYPTED 0x1000
+#define MPPE_HEADER_BITMASK 0xf000
+#define MPPE_HEADER_FLAG 0x00ff
+#define MPPE_HEADER_FLAGMASK 0x00ff
+#define MPPE_HEADER_FLAGSHIFT 8
+#define MPPE_HEADER_STATEFUL_KEYCHANGES 16
struct mppe_state {
unsigned stateless : 1;
@@ -276,6 +277,8 @@ MPPEInput(void *v, struct ccp *ccp, u_short *proto, struct mbuf *mp)
*/
n = (prefix >> MPPE_HEADER_FLAGSHIFT) -
(mip->cohnum >> MPPE_HEADER_FLAGSHIFT);
+ if (n < 0)
+ n += MPPE_HEADER_STATEFUL_KEYCHANGES;
while (n--) {
log_Printf(LogDEBUG, "MPPEInput: Key changed during catchup [%u]\n",
prefix);
@@ -388,7 +391,7 @@ MPPEDispOpts(struct lcp_opt *o)
}
snprintf(buf + len, sizeof buf - len, " bits, state%s",
- (val & MPPE_OPT_STATELESS) ? "less" : "full");
+ (val & MPPE_OPT_STATELESS) ? "less" : "ful");
len += strlen(buf + len);
if (val & MPPE_OPT_COMPRESSED) {
OpenPOWER on IntegriCloud