[Qemu-devel] [PATCH] [SLIRP] Fix total IP header length in forwarded TCP packets

Sjors Gielen posted 1 patch 6 years, 11 months ago
Failed in applying to current master (apply log)
slirp/tcp_subr.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[Qemu-devel] [PATCH] [SLIRP] Fix total IP header length in forwarded TCP packets
Posted by Sjors Gielen 6 years, 11 months ago
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>
---
 slirp/tcp_subr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/slirp/tcp_subr.c b/slirp/tcp_subr.c
index ed16e1807f..3d6193657c 100644
--- a/slirp/tcp_subr.c
+++ b/slirp/tcp_subr.c
@@ -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 = m->m_len;
     ip6->ip_dst = tcpiph_save.ti_dst6;
     ip6->ip_src = tcpiph_save.ti_src6;
     ip6->ip_nh = tcpiph_save.ti_nh6;
-- 
2.13.0
Re: [Qemu-devel] [PATCH] [SLIRP] Fix total IP header length in forwarded TCP packets
Posted by Samuel Thibault 6 years, 11 months ago
Sjors Gielen, on mer. 24 mai 2017 17:51:12 +0000, wrote:
> 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.

Indeed, applied, thanks.

Samuel