diff options
| -rw-r--r-- | sys/src/9/ip/icmp.c | 10 | ||||
| -rw-r--r-- | sys/src/9/ip/icmp6.c | 11 |
2 files changed, 12 insertions, 9 deletions
diff --git a/sys/src/9/ip/icmp.c b/sys/src/9/ip/icmp.c index 51f041b38..90c289f4b 100644 --- a/sys/src/9/ip/icmp.c +++ b/sys/src/9/ip/icmp.c @@ -401,10 +401,12 @@ icmpiput(Proto *icmp, Ipifc*, Block *bp) goto raise; } p = (Icmp *)bp->rp; - pr = Fsrcvpcolx(icmp->f, p->proto); - if(pr != nil && pr->advise != nil) { - (*pr->advise)(pr, bp, msg); - return; + if((nhgets(p->frag) & ~(IP_DF|IP_MF)) == 0){ + pr = Fsrcvpcolx(icmp->f, p->proto); + if(pr != nil && pr->advise != nil) { + (*pr->advise)(pr, bp, msg); + return; + } } bp->rp -= ICMP_IPSIZE+ICMP_HDRSIZE; goticmpkt(icmp, bp); diff --git a/sys/src/9/ip/icmp6.c b/sys/src/9/ip/icmp6.c index 783408076..4f483a79d 100644 --- a/sys/src/9/ip/icmp6.c +++ b/sys/src/9/ip/icmp6.c @@ -725,11 +725,12 @@ icmpiput6(Proto *icmp, Ipifc *ifc, Block *bp) bp->rp -= IP6HDR; } } - - pr = Fsrcvpcolx(icmp->f, p->proto); - if(pr != nil && pr->advise != nil) { - (*pr->advise)(pr, bp, msg); - return; + if(p->proto != FH){ + pr = Fsrcvpcolx(icmp->f, p->proto); + if(pr != nil && pr->advise != nil) { + (*pr->advise)(pr, bp, msg); + return; + } } bp->rp -= IPICMPSZ; goticmpkt6(icmp, bp, 0); |
