Commit 07b0188a authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann

mac802154: fix mac header length check

I got report about that sometimes the WARN_ON occurs there which should
never happen. I came to the conclusion that the mac header is there but
inside the headroom of skb. The skb->len information doesn't contain the
information about the headroom length and skb->len is lesser than two.

We check now if the skb_mac_header pointer is set and the room between
mac header pointer and tail pointer.
Signed-off-by: default avatarAlexander Aring <aar@pengutronix.de>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent aff3eaa0
...@@ -247,8 +247,9 @@ struct ieee802154_ops { ...@@ -247,8 +247,9 @@ struct ieee802154_ops {
*/ */
static inline __le16 ieee802154_get_fc_from_skb(const struct sk_buff *skb) static inline __le16 ieee802154_get_fc_from_skb(const struct sk_buff *skb)
{ {
/* return some invalid fc on failure */ /* check if we can fc at skb_mac_header of sk buffer */
if (unlikely(skb->len < 2)) { if (unlikely(!skb_mac_header_was_set(skb) ||
(skb_tail_pointer(skb) - skb_mac_header(skb)) < 2)) {
WARN_ON(1); WARN_ON(1);
return cpu_to_le16(0); return cpu_to_le16(0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment