Hello.
On 03/08/15 08:23, Alexander Aring wrote:
This patch introduce an earlier check if a 6LoWPAN can be valid. This
Missing the worde frame here? ...6LoWPAN frame can be valid...
contains at first for checking if the header contains a dispatch byte
and isn't the nalp dispatch value, which means it isn't a 6LoWPAN
packet.
Signed-off-by: Alexander Aring<alex.aring@xxxxxxxxx>
---
net/ieee802154/6lowpan/rx.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/net/ieee802154/6lowpan/rx.c b/net/ieee802154/6lowpan/rx.c
index 595830f..62d181a 100644
--- a/net/ieee802154/6lowpan/rx.c
+++ b/net/ieee802154/6lowpan/rx.c
@@ -172,11 +172,34 @@ rxh_next:
#undef CALL_RXH
}
+static inline bool lowpan_is_nalp(u8 dispatch)
+{
+ return (dispatch & LOWPAN_DISPATCH_FIRST) == LOWPAN_DISPATCH_NALP;
+}
+
+/* lowpan_rx_h_check checks on generic 6LoWPAN requirements
+ * in MAC and 6LoWPAN header.
+ *
+ * Don't manipulate the skb here, it could be shared buffer.
+ */
+static bool lowpan_rx_h_check(struct sk_buff *skb)
+{
+ /* check for if we can evaluate the dispatch */
check if... no need for a for here.
+ if (unlikely(!skb->len))
+ return false;
+
+ if (lowpan_is_nalp(*skb_network_header(skb)))
+ return false;
+
+ return true;
+}
+
static int lowpan_rcv(struct sk_buff *skb, struct net_device *wdev,
struct packet_type *pt, struct net_device *orig_wdev)
{
if (skb->pkt_type == PACKET_OTHERHOST ||
- wdev->type != ARPHRD_IEEE802154)
+ wdev->type != ARPHRD_IEEE802154 ||
+ !lowpan_rx_h_check(skb))
return NET_RX_DROP;
skb = skb_share_check(skb, GFP_ATOMIC);
Reviewed-by: Stefan Schmidt <stefan@xxxxxxxxxxxxxxx>
regards
Stefan Schmidt
--
To unsubscribe from this list: send the line "unsubscribe linux-wpan" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html