Fix total IP header length in forwarded TCP packets
authorSjors Gielen <sjors@sjorsgielen.nl>
Wed, 24 May 2017 17:51:12 +0000 (17:51 +0000)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Sat, 27 May 2017 21:35:00 +0000 (23:35 +0200)
When forwarding TCP packets, the internal tcpiphdr struct length was wrongly
used inside the IP header. This commit changes the behaviour to what is used
by tcp_output.c, using the correct full IP header + payload length.

Signed-off-by: Sjors Gielen <sjors@sjorsgielen.nl>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
slirp/tcp_subr.c

index ed16e1807fa884b83715318e7c149ab7d1bebe2c..dc8b4bbb50e48174d0019629298f7609c53adbe0 100644 (file)
@@ -204,7 +204,7 @@ tcp_respond(struct tcpcb *tp, struct tcpiphdr *ti, struct mbuf *m,
            m->m_len  -= sizeof(struct tcpiphdr) - sizeof(struct tcphdr)
                                                 - sizeof(struct ip);
            ip = mtod(m, struct ip *);
-           ip->ip_len = tlen;
+           ip->ip_len = m->m_len;
            ip->ip_dst = tcpiph_save.ti_dst;
            ip->ip_src = tcpiph_save.ti_src;
            ip->ip_p = tcpiph_save.ti_pr;
@@ -224,7 +224,7 @@ tcp_respond(struct tcpcb *tp, struct tcpiphdr *ti, struct mbuf *m,
            m->m_len  -= sizeof(struct tcpiphdr) - sizeof(struct tcphdr)
                                                 - sizeof(struct ip6);
            ip6 = mtod(m, struct ip6 *);
-           ip6->ip_pl = tlen;
+           ip6->ip_pl = tcpiph_save.ti_len;
            ip6->ip_dst = tcpiph_save.ti_dst6;
            ip6->ip_src = tcpiph_save.ti_src6;
            ip6->ip_nh = tcpiph_save.ti_nh6;