ieee802154: add valid psdu length helper
authorAlexander Aring <alex.aring@gmail.com>
Mon, 27 Oct 2014 16:13:40 +0000 (17:13 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 27 Oct 2014 17:07:49 +0000 (18:07 +0100)
This patch adds a generic valid psdu length check function helper. This
is useful to check the length field after receiving. For example the
at86rf231 doesn't filter invalid psdu length. Sometimes the CRC can also
be correct. If we get the lqi value with an invalid frame length the
kernel may crash because we dereference an invalid pointer in the
receive buffer.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
include/linux/ieee802154.h

index 2dfab2db103a72f2f9dc49c5d38423ce8c37e010..6e50a2a1d4851f77163b0dacf4623b17909363bd 100644 (file)
 #ifndef LINUX_IEEE802154_H
 #define LINUX_IEEE802154_H
 
+#include <linux/types.h>
+
 #define IEEE802154_MTU                 127
+#define IEEE802154_MIN_PSDU_LEN                5
 
 #define IEEE802154_FC_TYPE_BEACON      0x0     /* Frame is beacon */
 #define        IEEE802154_FC_TYPE_DATA         0x1     /* Frame is data */
@@ -185,5 +188,13 @@ enum {
        IEEE802154_SCAN_IN_PROGRESS = 0xfc,
 };
 
+/**
+ * ieee802154_is_valid_psdu_len - check if psdu len is valid
+ * @len: psdu len with (MHR + payload + MFR)
+ */
+static inline bool ieee802154_is_valid_psdu_len(const u8 len)
+{
+       return (len >= IEEE802154_MIN_PSDU_LEN && len <= IEEE802154_MTU);
+}
 
 #endif /* LINUX_IEEE802154_H */