summaryrefslogtreecommitdiff
path: root/sys/src/9/ip
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-08-02 02:02:10 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-08-02 02:02:10 +0200
commit1159f1e54f376cbd8db7ea9387818c2c10f79627 (patch)
tree3fd9619f578f82b6b1585599b8ebf0866bf00435 /sys/src/9/ip
parent49714325777f203a5632a378e0386c234985cc57 (diff)
ip: fix assert panic on fragmented icmp echo request (see eriks icmp-frag patch)
Diffstat (limited to 'sys/src/9/ip')
-rw-r--r--sys/src/9/ip/icmp.c2
-rw-r--r--sys/src/9/ip/icmp6.c2
-rw-r--r--sys/src/9/ip/ip.c1
3 files changed, 2 insertions, 3 deletions
diff --git a/sys/src/9/ip/icmp.c b/sys/src/9/ip/icmp.c
index 9dd5c9414..3f5a80e21 100644
--- a/sys/src/9/ip/icmp.c
+++ b/sys/src/9/ip/icmp.c
@@ -366,7 +366,7 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp)
case EchoRequest:
if (iplen < n)
bp = trimblock(bp, 0, iplen);
- r = mkechoreply(bp);
+ r = mkechoreply(concatblock(bp));
ipriv->out[EchoReply]++;
ipoput4(icmp->f, r, 0, MAXTTL, DFLTTOS, nil);
break;
diff --git a/sys/src/9/ip/icmp6.c b/sys/src/9/ip/icmp6.c
index 458280b27..7335a3c5e 100644
--- a/sys/src/9/ip/icmp6.c
+++ b/sys/src/9/ip/icmp6.c
@@ -734,7 +734,7 @@ icmpiput6(Proto *icmp, Ipifc *ipifc, Block *bp)
switch(p->type) {
case EchoRequestV6:
- r = mkechoreply6(bp, ipifc);
+ r = mkechoreply6(concatblock(bp), ipifc);
if(r == nil)
goto raise;
ipriv->out[EchoReply]++;
diff --git a/sys/src/9/ip/ip.c b/sys/src/9/ip/ip.c
index 19aef70a4..40fc9380e 100644
--- a/sys/src/9/ip/ip.c
+++ b/sys/src/9/ip/ip.c
@@ -208,7 +208,6 @@ ipoput4(Fs *f, Block *bp, int gating, int ttl, int tos, Conv *c)
eh->cksum[0] = 0;
eh->cksum[1] = 0;
hnputs(eh->cksum, ipcsum(&eh->vihl));
- assert(bp->next == nil);
ifc->m->bwrite(ifc, bp, V4, gate);
runlock(ifc);
poperror();