From 02c7b6922899621aa8e8babe27fca7b6b2e497b0 Mon Sep 17 00:00:00 2001
From: Alexander Aring <alex.aring@gmail.com>
Date: Fri, 18 Sep 2015 11:30:44 +0200
Subject: [PATCH] mac802154: tx: add warning if MTU exceeds

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 | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/net/mac802154/tx.c b/net/mac802154/tx.c
index 66d7ecb7c56b..5ee596e00a6d 100644
--- a/net/mac802154/tx.c
+++ b/net/mac802154/tx.c
@@ -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);
 
-- 
2.30.9