]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
net: core: Assert the size of netdev_featres_t
authorFlorian Fainelli <f.fainelli@gmail.com>
Fri, 27 Apr 2018 20:11:14 +0000 (13:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 30 Apr 2018 02:50:36 +0000 (22:50 -0400)
We have about 53 netdev_features_t bits defined and counting, add a
build time check to catch when an u64 type will not be enough and we
will have to convert that to a bitmap. This is done in
register_netdevice() for convenience.

Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netdevice.h
net/core/dev.c

index 82f5a9aba5780be69a5d7483d7f49b84e32dccd7..9e09dd897b749d957d8843f36920d1d99610cf06 100644 (file)
@@ -4108,6 +4108,12 @@ const char *netdev_drivername(const struct net_device *dev);
 
 void linkwatch_run_queue(void);
 
+static inline void netdev_features_size_check(void)
+{
+       BUILD_BUG_ON(sizeof(netdev_features_t) * BITS_PER_BYTE <
+                    NETDEV_FEATURE_COUNT);
+}
+
 static inline netdev_features_t netdev_intersect_features(netdev_features_t f1,
                                                          netdev_features_t f2)
 {
index 25ceecfdd8fe11afacb9c735471c6aa45ad47e0d..e01c21a88cae04112a915684ddd3925791bc3161 100644 (file)
@@ -7879,6 +7879,7 @@ int register_netdevice(struct net_device *dev)
        int ret;
        struct net *net = dev_net(dev);
 
+       netdev_features_size_check();
        BUG_ON(dev_boot_phase);
        ASSERT_RTNL();