net/tcp: fix TCP options processing
Current TCP code may miss an option if TCP_O_NOP option was used before it for proper aligning. Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:

committed by
Tom Rini

parent
d580a013cc
commit
77da29b868
@@ -475,7 +475,7 @@ void tcp_parse_options(uchar *o, int o_len)
|
||||
* NOPs are options with a zero length, and thus are special.
|
||||
* All other options have length fields.
|
||||
*/
|
||||
for (p = o; p < (o + o_len); p = p + p[1]) {
|
||||
for (p = o; p < (o + o_len); ) {
|
||||
if (!p[1])
|
||||
return; /* Finished processing options */
|
||||
|
||||
@@ -490,12 +490,14 @@ void tcp_parse_options(uchar *o, int o_len)
|
||||
case TCP_O_TS:
|
||||
tsopt = (struct tcp_t_opt *)p;
|
||||
rmt_timestamp = tsopt->t_snd;
|
||||
return;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Process optional NOPs */
|
||||
if (p[0] == TCP_O_NOP)
|
||||
p++;
|
||||
else
|
||||
p += p[1];
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user