mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-16 10:20:30 +00:00
Fix bug in dealing with "hlen == 1 and opt > 1"
This commit is contained in:
parent
e0ab5cb523
commit
68b16578ca
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=60295
@ -285,13 +285,19 @@ fr_info_t *fin;
|
||||
}
|
||||
|
||||
|
||||
for (s = (u_char *)(ip + 1), hlen -= (int)sizeof(*ip); hlen; ) {
|
||||
for (s = (u_char *)(ip + 1), hlen -= (int)sizeof(*ip); hlen > 0; ) {
|
||||
opt = *s;
|
||||
if (opt == '\0')
|
||||
break;
|
||||
ol = (opt == IPOPT_NOP) ? 1 : (int)*(s+1);
|
||||
if (opt > 1 && (ol < 2 || ol > hlen))
|
||||
break;
|
||||
else if (opt == IPOPT_NOP)
|
||||
ol = 1;
|
||||
else {
|
||||
if (hlen < 2)
|
||||
break;
|
||||
ol = (int)*(s + 1);
|
||||
if (ol < 2 || ol > hlen)
|
||||
break;
|
||||
}
|
||||
for (i = 9, mv = 4; mv >= 0; ) {
|
||||
op = ipopts + i;
|
||||
if (opt == (u_char)op->ol_val) {
|
||||
|
Loading…
Reference in New Issue
Block a user