From 4885c75526f91ff9eb245b32a63512e2e67b3038 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Thu, 7 Mar 2019 01:25:11 +0100 Subject: devip: ignore icmp advise about laggard fragments icmp has to advise protocols about the first fragment only. all other fragments should be ignored. --- sys/src/9/ip/icmp.c | 10 ++++++---- sys/src/9/ip/icmp6.c | 11 ++++++----- 2 files changed, 12 insertions(+), 9 deletions(-) (limited to 'sys/src') 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); -- cgit v1.2.3