mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-23 16:01:42 +00:00
Remove TCP options ordering assumptions in tcp_addoptions(). Ordering
was changed in rev. 1.161 of tcp_var.h. All option now test for sufficient space in TCP header before getting added. Reported by: Mark Atkinson <atkin901-at-yahoo.com> Tested by: Mark Atkinson <atkin901-at-yahoo.com> MFC after: 1 week
This commit is contained in:
parent
5b2e33eab5
commit
3a4018c4e8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=177988
@ -1280,12 +1280,16 @@ tcp_addoptions(struct tcpopt *to, u_char *optp)
|
||||
for (mask = 1; mask < TOF_MAXOPT; mask <<= 1) {
|
||||
if ((to->to_flags & mask) != mask)
|
||||
continue;
|
||||
if (optlen == TCP_MAXOLEN)
|
||||
break;
|
||||
switch (to->to_flags & mask) {
|
||||
case TOF_MSS:
|
||||
while (optlen % 4) {
|
||||
optlen += TCPOLEN_NOP;
|
||||
*optp++ = TCPOPT_NOP;
|
||||
}
|
||||
if (TCP_MAXOLEN - optlen < TCPOLEN_MAXSEG)
|
||||
continue;
|
||||
optlen += TCPOLEN_MAXSEG;
|
||||
*optp++ = TCPOPT_MAXSEG;
|
||||
*optp++ = TCPOLEN_MAXSEG;
|
||||
@ -1298,6 +1302,8 @@ tcp_addoptions(struct tcpopt *to, u_char *optp)
|
||||
optlen += TCPOLEN_NOP;
|
||||
*optp++ = TCPOPT_NOP;
|
||||
}
|
||||
if (TCP_MAXOLEN - optlen < TCPOLEN_WINDOW)
|
||||
continue;
|
||||
optlen += TCPOLEN_WINDOW;
|
||||
*optp++ = TCPOPT_WINDOW;
|
||||
*optp++ = TCPOLEN_WINDOW;
|
||||
@ -1308,6 +1314,8 @@ tcp_addoptions(struct tcpopt *to, u_char *optp)
|
||||
optlen += TCPOLEN_NOP;
|
||||
*optp++ = TCPOPT_NOP;
|
||||
}
|
||||
if (TCP_MAXOLEN - optlen < TCPOLEN_SACK_PERMITTED)
|
||||
continue;
|
||||
optlen += TCPOLEN_SACK_PERMITTED;
|
||||
*optp++ = TCPOPT_SACK_PERMITTED;
|
||||
*optp++ = TCPOLEN_SACK_PERMITTED;
|
||||
@ -1317,6 +1325,8 @@ tcp_addoptions(struct tcpopt *to, u_char *optp)
|
||||
optlen += TCPOLEN_NOP;
|
||||
*optp++ = TCPOPT_NOP;
|
||||
}
|
||||
if (TCP_MAXOLEN - optlen < TCPOLEN_TIMESTAMP)
|
||||
continue;
|
||||
optlen += TCPOLEN_TIMESTAMP;
|
||||
*optp++ = TCPOPT_TIMESTAMP;
|
||||
*optp++ = TCPOLEN_TIMESTAMP;
|
||||
@ -1355,7 +1365,7 @@ tcp_addoptions(struct tcpopt *to, u_char *optp)
|
||||
optlen += TCPOLEN_NOP;
|
||||
*optp++ = TCPOPT_NOP;
|
||||
}
|
||||
if (TCP_MAXOLEN - optlen < 2 + TCPOLEN_SACK)
|
||||
if (TCP_MAXOLEN - optlen < TCPOLEN_SACKHDR + TCPOLEN_SACK)
|
||||
continue;
|
||||
optlen += TCPOLEN_SACKHDR;
|
||||
*optp++ = TCPOPT_SACK;
|
||||
|
Loading…
Reference in New Issue
Block a user