From fef6f51d19e390757db6007127878d56a17c4e24 Mon Sep 17 00:00:00 2001 From: Ben Magistro Date: Sat, 29 Jan 2022 17:32:25 +0000 Subject: [PATCH] Set a default MSS when establishing tcb if unset While the caller to tle_tcp_stream_establish, should provide a complete connection info to include mss, if it is not provided it will trigger a divide by zero in tle_tcp_stream_writev. RFCs have defined a default value for IPv4 and IPv6, which is leveraged if left unspecified. Signed-off-by: Ben Magistro Change-Id: Ic29f4398b22a601eddf2a501e9cc185106457303 --- lib/libtle_l4p/tcp_rxtx.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/libtle_l4p/tcp_rxtx.c b/lib/libtle_l4p/tcp_rxtx.c index a702177..3d1c550 100644 --- a/lib/libtle_l4p/tcp_rxtx.c +++ b/lib/libtle_l4p/tcp_rxtx.c @@ -2277,7 +2277,17 @@ tcb_establish(struct tle_tcp_stream *s, const struct tle_tcp_conn_info *ci) uint32_t mss, tms; tms = tcp_get_tms(s->s.ctx->cycles_ms_shift); - mss = calc_smss(ci->so.mss, &s->tx.dst); + + /* set a default MSS if it is unset (0) */ + if ((ci->so.mss == 0) && (s->s.type == TLE_V4)) { + mss = calc_smss(TCP4_MIN_MSS, &s->tx.dst); + } + else if ((ci->so.mss == 0) && (s->s.type == TLE_V6)) { + mss = calc_smss(TCP6_MIN_MSS, &s->tx.dst); + } + else { + mss = calc_smss(ci->so.mss, &s->tx.dst); + } s->tcb.so = ci->so; fill_tcb_snd(&s->tcb, ci->ack, ci->seq, mss, -- 2.16.6