In case of checksum error, the framing layer returns -EILSEQ, but
does not free the packet. Plug this hole by freeing the packet if
-EILSEQ is returned.
Signed-off-by: Sjur Brændeland <sjur.brandeland@stericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 {
        struct cfpkt *pkt;
        struct caif_device_entry *caifd;
+       int err;
 
        pkt = cfpkt_fromnative(CAIF_DIR_IN, skb);
 
        caifd_hold(caifd);
        rcu_read_unlock();
 
-       caifd->layer.up->receive(caifd->layer.up, pkt);
+       err = caifd->layer.up->receive(caifd->layer.up, pkt);
+
+       /* For -EILSEQ the packet is not freed so so it now */
+       if (err == -EILSEQ)
+               cfpkt_destroy(pkt);
 
        /* Release reference to stack upwards */
        caifd_put(caifd);