From fdda22c200e8daba47853ebfc1a2ff26c5012aeb Mon Sep 17 00:00:00 2001 From: Simon Brummer Date: Tue, 24 Sep 2019 19:13:13 +0200 Subject: [PATCH] gnrc_tcp: allow unknown options --- .../gnrc/transport_layer/tcp/gnrc_tcp_option.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c b/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c index 6b8c564073..5226e34588 100644 --- a/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c +++ b/sys/net/gnrc/transport_layer/tcp/gnrc_tcp_option.c @@ -51,7 +51,9 @@ int _option_parse(gnrc_tcp_tcb_t *tcb, tcp_hdr_t *hdr) continue; case TCP_OPTION_KIND_MSS: - if (opt_left < TCP_OPTION_LENGTH_MIN || option->length > opt_left || option->length != TCP_OPTION_LENGTH_MSS) { + if (opt_left < TCP_OPTION_LENGTH_MIN || option->length > opt_left || + option->length != TCP_OPTION_LENGTH_MSS) { + DEBUG("gnrc_tcp_option.c : _option_parse() : invalid MSS Option length.\n"); return -1; } @@ -61,14 +63,15 @@ int _option_parse(gnrc_tcp_tcb_t *tcb, tcp_hdr_t *hdr) break; default: - DEBUG("gnrc_tcp_option.c : _option_parse() : Unknown option found.\ - KIND=%"PRIu8", LENGTH=%"PRIu8"\n", option->kind, option->length); - return -1; + if (opt_left >= TCP_OPTION_LENGTH_MIN) { + DEBUG("gnrc_tcp_option.c : _option_parse() : Unsupported option found.\ + KIND=%"PRIu8", LENGTH=%"PRIu8"\n", option->kind, option->length); + } } if (opt_left < TCP_OPTION_LENGTH_MIN || option->length > opt_left) { - DEBUG("gnrc_tcp_option.c : _option_parse() : invalid option length\n"); - return 0; + DEBUG("gnrc_tcp_option.c : _option_parse() : Invalid option. Drop Packet.\n"); + return -1; } opt_ptr += option->length;