From: Alexander Lobakin <alobakin@pm.me>
To: "Magnus Karlsson" <magnus.karlsson@intel.com>,
"Björn Töpel" <bjorn@kernel.org>
Cc: "Michael S. Tsirkin" <mst@redhat.com>,
Jason Wang <jasowang@redhat.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
Jonathan Lemon <jonathan.lemon@gmail.com>,
Alexei Starovoitov <ast@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Jesper Dangaard Brouer <hawk@kernel.org>,
John Fastabend <john.fastabend@gmail.com>,
Andrii Nakryiko <andrii@kernel.org>,
Martin KaFai Lau <kafai@fb.com>, Song Liu <songliubraving@fb.com>,
Yonghong Song <yhs@fb.com>, KP Singh <kpsingh@kernel.org>,
Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <eric.dumazet@gmail.com>,
Xuan Zhuo <xuanzhuo@linux.alibaba.com>,
Dust Li <dust.li@linux.alibaba.com>,
Alexander Lobakin <alobakin@pm.me>,
virtualization@lists.linux-foundation.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
bpf@vger.kernel.org
Subject: [PATCH v4 bpf-next 2/6] netdevice: check for net_device::priv_flags bitfield overflow
Date: Tue, 16 Feb 2021 11:38:34 +0000 [thread overview]
Message-ID: <20210216113740.62041-3-alobakin@pm.me> (raw)
In-Reply-To: <20210216113740.62041-1-alobakin@pm.me>
We almost ran out of unsigned int bitwidth. Define priv flags and
check for potential overflow in the fashion of netdev_features_t.
Defined this way, priv_flags can be easily expanded later with
just changing its typedef.
Signed-off-by: Alexander Lobakin <alobakin@pm.me>
---
include/linux/netdevice.h | 135 ++++++++++++++++++++------------------
1 file changed, 72 insertions(+), 63 deletions(-)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index b895973390ee..fa4ab77ce81e 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1527,70 +1527,79 @@ struct net_device_ops {
* @IFF_LIVE_RENAME_OK: rename is allowed while device is up and running
*/
enum netdev_priv_flags {
- IFF_802_1Q_VLAN = 1<<0,
- IFF_EBRIDGE = 1<<1,
- IFF_BONDING = 1<<2,
- IFF_ISATAP = 1<<3,
- IFF_WAN_HDLC = 1<<4,
- IFF_XMIT_DST_RELEASE = 1<<5,
- IFF_DONT_BRIDGE = 1<<6,
- IFF_DISABLE_NETPOLL = 1<<7,
- IFF_MACVLAN_PORT = 1<<8,
- IFF_BRIDGE_PORT = 1<<9,
- IFF_OVS_DATAPATH = 1<<10,
- IFF_TX_SKB_SHARING = 1<<11,
- IFF_UNICAST_FLT = 1<<12,
- IFF_TEAM_PORT = 1<<13,
- IFF_SUPP_NOFCS = 1<<14,
- IFF_LIVE_ADDR_CHANGE = 1<<15,
- IFF_MACVLAN = 1<<16,
- IFF_XMIT_DST_RELEASE_PERM = 1<<17,
- IFF_L3MDEV_MASTER = 1<<18,
- IFF_NO_QUEUE = 1<<19,
- IFF_OPENVSWITCH = 1<<20,
- IFF_L3MDEV_SLAVE = 1<<21,
- IFF_TEAM = 1<<22,
- IFF_RXFH_CONFIGURED = 1<<23,
- IFF_PHONY_HEADROOM = 1<<24,
- IFF_MACSEC = 1<<25,
- IFF_NO_RX_HANDLER = 1<<26,
- IFF_FAILOVER = 1<<27,
- IFF_FAILOVER_SLAVE = 1<<28,
- IFF_L3MDEV_RX_HANDLER = 1<<29,
- IFF_LIVE_RENAME_OK = 1<<30,
+ IFF_802_1Q_VLAN_BIT,
+ IFF_EBRIDGE_BIT,
+ IFF_BONDING_BIT,
+ IFF_ISATAP_BIT,
+ IFF_WAN_HDLC_BIT,
+ IFF_XMIT_DST_RELEASE_BIT,
+ IFF_DONT_BRIDGE_BIT,
+ IFF_DISABLE_NETPOLL_BIT,
+ IFF_MACVLAN_PORT_BIT,
+ IFF_BRIDGE_PORT_BIT,
+ IFF_OVS_DATAPATH_BIT,
+ IFF_TX_SKB_SHARING_BIT,
+ IFF_UNICAST_FLT_BIT,
+ IFF_TEAM_PORT_BIT,
+ IFF_SUPP_NOFCS_BIT,
+ IFF_LIVE_ADDR_CHANGE_BIT,
+ IFF_MACVLAN_BIT,
+ IFF_XMIT_DST_RELEASE_PERM_BIT,
+ IFF_L3MDEV_MASTER_BIT,
+ IFF_NO_QUEUE_BIT,
+ IFF_OPENVSWITCH_BIT,
+ IFF_L3MDEV_SLAVE_BIT,
+ IFF_TEAM_BIT,
+ IFF_RXFH_CONFIGURED_BIT,
+ IFF_PHONY_HEADROOM_BIT,
+ IFF_MACSEC_BIT,
+ IFF_NO_RX_HANDLER_BIT,
+ IFF_FAILOVER_BIT,
+ IFF_FAILOVER_SLAVE_BIT,
+ IFF_L3MDEV_RX_HANDLER_BIT,
+ IFF_LIVE_RENAME_OK_BIT,
+
+ NETDEV_PRIV_FLAG_COUNT,
};
-#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
-#define IFF_EBRIDGE IFF_EBRIDGE
-#define IFF_BONDING IFF_BONDING
-#define IFF_ISATAP IFF_ISATAP
-#define IFF_WAN_HDLC IFF_WAN_HDLC
-#define IFF_XMIT_DST_RELEASE IFF_XMIT_DST_RELEASE
-#define IFF_DONT_BRIDGE IFF_DONT_BRIDGE
-#define IFF_DISABLE_NETPOLL IFF_DISABLE_NETPOLL
-#define IFF_MACVLAN_PORT IFF_MACVLAN_PORT
-#define IFF_BRIDGE_PORT IFF_BRIDGE_PORT
-#define IFF_OVS_DATAPATH IFF_OVS_DATAPATH
-#define IFF_TX_SKB_SHARING IFF_TX_SKB_SHARING
-#define IFF_UNICAST_FLT IFF_UNICAST_FLT
-#define IFF_TEAM_PORT IFF_TEAM_PORT
-#define IFF_SUPP_NOFCS IFF_SUPP_NOFCS
-#define IFF_LIVE_ADDR_CHANGE IFF_LIVE_ADDR_CHANGE
-#define IFF_MACVLAN IFF_MACVLAN
-#define IFF_XMIT_DST_RELEASE_PERM IFF_XMIT_DST_RELEASE_PERM
-#define IFF_L3MDEV_MASTER IFF_L3MDEV_MASTER
-#define IFF_NO_QUEUE IFF_NO_QUEUE
-#define IFF_OPENVSWITCH IFF_OPENVSWITCH
-#define IFF_L3MDEV_SLAVE IFF_L3MDEV_SLAVE
-#define IFF_TEAM IFF_TEAM
-#define IFF_RXFH_CONFIGURED IFF_RXFH_CONFIGURED
-#define IFF_PHONY_HEADROOM IFF_PHONY_HEADROOM
-#define IFF_MACSEC IFF_MACSEC
-#define IFF_NO_RX_HANDLER IFF_NO_RX_HANDLER
-#define IFF_FAILOVER IFF_FAILOVER
-#define IFF_FAILOVER_SLAVE IFF_FAILOVER_SLAVE
-#define IFF_L3MDEV_RX_HANDLER IFF_L3MDEV_RX_HANDLER
-#define IFF_LIVE_RENAME_OK IFF_LIVE_RENAME_OK
+typedef u32 netdev_priv_flags_t;
+static_assert(sizeof(netdev_priv_flags_t) * BITS_PER_BYTE <=
+ NETDEV_PRIV_FLAG_COUNT);
+
+#define __IFF_BIT(bit) ((netdev_priv_flags_t)1 << (bit))
+#define __IFF(name) __IFF_BIT(IFF_##name##_BIT)
+
+#define IFF_802_1Q_VLAN __IFF(802_1Q_VLAN)
+#define IFF_EBRIDGE __IFF(EBRIDGE)
+#define IFF_BONDING __IFF(BONDING)
+#define IFF_ISATAP __IFF(ISATAP)
+#define IFF_WAN_HDLC __IFF(WAN_HDLC)
+#define IFF_XMIT_DST_RELEASE __IFF(XMIT_DST_RELEASE)
+#define IFF_DONT_BRIDGE __IFF(DONT_BRIDGE)
+#define IFF_DISABLE_NETPOLL __IFF(DISABLE_NETPOLL)
+#define IFF_MACVLAN_PORT __IFF(MACVLAN_PORT)
+#define IFF_BRIDGE_PORT __IFF(BRIDGE_PORT)
+#define IFF_OVS_DATAPATH __IFF(OVS_DATAPATH)
+#define IFF_TX_SKB_SHARING __IFF(TX_SKB_SHARING)
+#define IFF_UNICAST_FLT __IFF(UNICAST_FLT)
+#define IFF_TEAM_PORT __IFF(TEAM_PORT)
+#define IFF_SUPP_NOFCS __IFF(SUPP_NOFCS)
+#define IFF_LIVE_ADDR_CHANGE __IFF(LIVE_ADDR_CHANGE)
+#define IFF_MACVLAN __IFF(MACVLAN)
+#define IFF_XMIT_DST_RELEASE_PERM __IFF(XMIT_DST_RELEASE_PERM)
+#define IFF_L3MDEV_MASTER __IFF(L3MDEV_MASTER)
+#define IFF_NO_QUEUE __IFF(NO_QUEUE)
+#define IFF_OPENVSWITCH __IFF(OPENVSWITCH)
+#define IFF_L3MDEV_SLAVE __IFF(L3MDEV_SLAVE)
+#define IFF_TEAM __IFF(TEAM)
+#define IFF_RXFH_CONFIGURED __IFF(RXFH_CONFIGURED)
+#define IFF_PHONY_HEADROOM __IFF(PHONY_HEADROOM)
+#define IFF_MACSEC __IFF(MACSEC)
+#define IFF_NO_RX_HANDLER __IFF(NO_RX_HANDLER)
+#define IFF_FAILOVER __IFF(FAILOVER)
+#define IFF_FAILOVER_SLAVE __IFF(FAILOVER_SLAVE)
+#define IFF_L3MDEV_RX_HANDLER __IFF(L3MDEV_RX_HANDLER)
+#define IFF_LIVE_RENAME_OK __IFF(LIVE_RENAME_OK)
/**
* struct net_device - The DEVICE structure.
@@ -1925,7 +1934,7 @@ struct net_device {
const struct header_ops *header_ops;
unsigned int flags;
- unsigned int priv_flags;
+ netdev_priv_flags_t priv_flags;
unsigned short gflags;
unsigned short padded;
--
2.30.1
next prev parent reply other threads:[~2021-02-16 11:45 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-16 11:38 [PATCH v4 bpf-next 0/6] xsk: build skb by page (aka generic zerocopy xmit) Alexander Lobakin
2021-02-16 11:38 ` [PATCH v4 bpf-next 1/6] netdev_priv_flags: add missing IFF_PHONY_HEADROOM self-definition Alexander Lobakin
2021-02-16 11:38 ` Alexander Lobakin [this message]
2021-02-16 14:18 ` [PATCH v4 bpf-next 2/6] netdevice: check for net_device::priv_flags bitfield overflow kernel test robot
2021-02-16 11:38 ` [PATCH v4 bpf-next 3/6] net: add priv_flags for allow tx skb without linear Alexander Lobakin
2021-02-16 11:38 ` [PATCH v4 bpf-next 4/6] virtio-net: support IFF_TX_SKB_NO_LINEAR Alexander Lobakin
2021-02-16 11:39 ` [PATCH v4 bpf-next 5/6] xsk: respect device's headroom and tailroom on generic xmit path Alexander Lobakin
2021-02-16 14:08 ` Magnus Karlsson
2021-02-16 11:39 ` [PATCH v4 bpf-next 6/6] xsk: build skb by page (aka generic zerocopy xmit) Alexander Lobakin
2021-02-16 14:08 ` Magnus Karlsson
2021-02-16 14:15 ` Alexander Lobakin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210216113740.62041-3-alobakin@pm.me \
--to=alobakin@pm.me \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bjorn@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=dust.li@linux.alibaba.com \
--cc=eric.dumazet@gmail.com \
--cc=hawk@kernel.org \
--cc=jasowang@redhat.com \
--cc=john.fastabend@gmail.com \
--cc=jonathan.lemon@gmail.com \
--cc=kafai@fb.com \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=magnus.karlsson@intel.com \
--cc=mst@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=songliubraving@fb.com \
--cc=virtualization@lists.linux-foundation.org \
--cc=xuanzhuo@linux.alibaba.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.