mac802154: tx: add warning if MTU exceeds
authorAlexander Aring <alex.aring@gmail.com>
Fri, 18 Sep 2015 09:30:44 +0000 (11:30 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 22 Sep 2015 09:51:20 +0000 (11:51 +0200)
Sending over AF_PACKET RAW sockets we can sending frames which exceeds
MTU size. To handling it correct we need to change things in AF_PACKET
which knows on RAW sockets an additional FCS is set by hardware or
mac802154 transmit functionality.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/mac802154/tx.c

index 66d7ecb7c56b24b79464a775fac6fd380d2c4e56..5ee596e00a6da718002dbd6c7e1d5ca226bbaf00 100644 (file)
@@ -71,6 +71,17 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)
        struct net_device *dev = skb->dev;
        int ret;
 
+       /* This check is for AF_PACKET RAW socket only, which doesn't
+        * know about the FCS which is set here or by hardware. otherwise
+        * it should not occur in any case!
+        *
+        * TODO: This should be handled in AF_PACKET and return -EMSGSIZE.
+        */
+       if (skb->len > IEEE802154_MTU - IEEE802154_FCS_LEN) {
+               netdev_warn(dev, "Frame len above MTU limit. Dropped.\n");
+               goto err_tx;
+       }
+
        if (!(local->hw.flags & IEEE802154_HW_TX_OMIT_CKSUM)) {
                u16 crc = crc_ccitt(0, skb->data, skb->len);