On 02/15/2019 08:24 PM, David Miller wrote: > From: Hauke Mehrtens <hauke.mehrtens@xxxxxxxxx> > Date: Fri, 15 Feb 2019 17:58:54 +0100 > >> The features attribute is of type u64 and stored in the native endianes on >> the system. The for_each_set_bit() macro takes a pointer to a 32 bit array >> and goes over the bits in this area. On little Endian systems this also >> works with an u64 as the most significant bit is on the highest address, >> but on big endian the words are swapped. When we expect bit 15 here we get >> bit 47 (15 + 32). >> >> This patch converts it more or less to its own for_each_set_bit() >> implementation which works on 64 bit integers directly. This is then >> completely in host endianness and should work like expected. >> >> Fixes: fd867d51f ("net/core: generic support for disabling netdev features down stack") >> Cc: stable@xxxxxxxxxxxxxxx >> Signed-off-by: Hauke Mehrtens <hauke.mehrtens@xxxxxxxxx> > > Applied and queued up for -stable. > > Please do not CC: stable for networking fixes, I handle -stable submissions > myself manually and this is documented in the netdev FAQ. > This commit added a call to fls64(), but not the needed include. This might break some uses I think. I suggest the following fix : diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h index c50cedb65cf56fe7d722a5a321b714ed83f449a0..d3f61011f4346e4ea80b61f88bd24541dd006014 100644 --- a/include/linux/netdev_features.h +++ b/include/linux/netdev_features.h @@ -11,6 +11,7 @@ #define _LINUX_NETDEV_FEATURES_H #include <linux/types.h> +#include <linux/bitops.h> #include <asm/byteorder.h> typedef u64 netdev_features_t;