Fix icmp reception with CONFIG_BLOCK_EXTRAS
authorAndrew Gallatin <gallatin@google.com>
Fri, 19 Dec 2014 14:31:06 +0000 (06:31 -0800)
committerAndrew Gallatin <gallatin@google.com>
Fri, 19 Dec 2014 14:31:06 +0000 (06:31 -0800)
When block extras are used by a NIC driver, the icmp input
path needs to pull up the headers it intends to access, else
it will just read garbage.

This fixes a problem with large pings failing on an out-of-tree
NIC driver with CONFIG_BLOCK_EXTRAS enabled.

kern/src/net/icmp.c

index ffbc524..1ec1f28 100644 (file)
@@ -331,6 +331,10 @@ static void icmpiput(struct Proto *icmp, struct Ipifc *unused, struct block *bp)
        char m2[128];
        Icmppriv *ipriv;
 
+       bp = pullupblock(bp, ICMP_IPSIZE + ICMP_HDRSIZE);
+       if (bp == NULL)
+               return;
+
        ipriv = icmp->priv;
 
        ipriv->stats[InMsgs]++;