Message ID | 20160618083607.3538-1-aar@pengutronix.de (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Hello. On 18/06/16 10:36, Alexander Aring wrote: > This patch fixes ieee802154_get_fc_from_skb function on big endian > machines. The function get_unaligned_le16 converts the byte order to > host byte order but we want to keep the byte order like in mac header. > > Signed-off-by: Alexander Aring <aar@pengutronix.de> > --- > include/net/mac802154.h | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/include/net/mac802154.h b/include/net/mac802154.h > index df34187..3d7fa73 100644 > --- a/include/net/mac802154.h > +++ b/include/net/mac802154.h > @@ -247,14 +247,16 @@ struct ieee802154_ops { > */ > static inline __le16 ieee802154_get_fc_from_skb(const struct sk_buff *skb) > { > + __le16 fc; > + > /* check if we can fc at skb_mac_header of sk buffer */ > - if (unlikely(!skb_mac_header_was_set(skb) || > - (skb_tail_pointer(skb) - skb_mac_header(skb)) < 2)) { > - WARN_ON(1); > + if (WARN_ON(!skb_mac_header_was_set(skb) || > + (skb_tail_pointer(skb) - > + skb_mac_header(skb)) < IEEE802154_FC_LEN)) > return cpu_to_le16(0); > - } The hunk above is totally unrelated to the change you describe in your commit messages and should imho be split off into a different patch. > > - return get_unaligned_le16(skb_mac_header(skb)); > + memcpy(&fc, skb_mac_header(skb), IEEE802154_FC_LEN); > + return fc; > } > > /** The actual fix for big endian looks fine to me. regards Stefan Schmidt -- To unsubscribe from this list: send the line "unsubscribe linux-wpan" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/mac802154.h b/include/net/mac802154.h index df34187..3d7fa73 100644 --- a/include/net/mac802154.h +++ b/include/net/mac802154.h @@ -247,14 +247,16 @@ struct ieee802154_ops { */ static inline __le16 ieee802154_get_fc_from_skb(const struct sk_buff *skb) { + __le16 fc; + /* check if we can fc at skb_mac_header of sk buffer */ - if (unlikely(!skb_mac_header_was_set(skb) || - (skb_tail_pointer(skb) - skb_mac_header(skb)) < 2)) { - WARN_ON(1); + if (WARN_ON(!skb_mac_header_was_set(skb) || + (skb_tail_pointer(skb) - + skb_mac_header(skb)) < IEEE802154_FC_LEN)) return cpu_to_le16(0); - } - return get_unaligned_le16(skb_mac_header(skb)); + memcpy(&fc, skb_mac_header(skb), IEEE802154_FC_LEN); + return fc; } /**
This patch fixes ieee802154_get_fc_from_skb function on big endian machines. The function get_unaligned_le16 converts the byte order to host byte order but we want to keep the byte order like in mac header. Signed-off-by: Alexander Aring <aar@pengutronix.de> --- include/net/mac802154.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)