Skip to content

Commit 21deb2d

Browse files
RubenKelevraPaolo Abeni
authored andcommitted
net: ieee8021q: fix insufficient table-size assertion
_Static_assert(ARRAY_SIZE(map) != IEEE8021Q_TT_MAX - 1) rejects only a length of 7 and allows any other mismatch. Replace it with a strict equality test via a helper macro so that every mapping table must have exactly IEEE8021Q_TT_MAX (8) entries. Signed-off-by: RubenKelevra <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Paolo Abeni <[email protected]>
1 parent 8b79380 commit 21deb2d

File tree

1 file changed

+13
-31
lines changed

1 file changed

+13
-31
lines changed

net/core/ieee8021q_helpers.c

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
#include <net/dscp.h>
88
#include <net/ieee8021q.h>
99

10+
/* verify that table covers all 8 traffic types */
11+
#define TT_MAP_SIZE_OK(tbl) \
12+
compiletime_assert(ARRAY_SIZE(tbl) == IEEE8021Q_TT_MAX, \
13+
#tbl " size mismatch")
14+
1015
/* The following arrays map Traffic Types (TT) to traffic classes (TC) for
1116
* different number of queues as shown in the example provided by
1217
* IEEE 802.1Q-2022 in Annex I "I.3 Traffic type to traffic class mapping" and
@@ -101,51 +106,28 @@ int ieee8021q_tt_to_tc(enum ieee8021q_traffic_type tt, unsigned int num_queues)
101106

102107
switch (num_queues) {
103108
case 8:
104-
compiletime_assert(ARRAY_SIZE(ieee8021q_8queue_tt_tc_map) !=
105-
IEEE8021Q_TT_MAX - 1,
106-
"ieee8021q_8queue_tt_tc_map != max - 1");
109+
TT_MAP_SIZE_OK(ieee8021q_8queue_tt_tc_map);
107110
return ieee8021q_8queue_tt_tc_map[tt];
108111
case 7:
109-
compiletime_assert(ARRAY_SIZE(ieee8021q_7queue_tt_tc_map) !=
110-
IEEE8021Q_TT_MAX - 1,
111-
"ieee8021q_7queue_tt_tc_map != max - 1");
112-
112+
TT_MAP_SIZE_OK(ieee8021q_7queue_tt_tc_map);
113113
return ieee8021q_7queue_tt_tc_map[tt];
114114
case 6:
115-
compiletime_assert(ARRAY_SIZE(ieee8021q_6queue_tt_tc_map) !=
116-
IEEE8021Q_TT_MAX - 1,
117-
"ieee8021q_6queue_tt_tc_map != max - 1");
118-
115+
TT_MAP_SIZE_OK(ieee8021q_6queue_tt_tc_map);
119116
return ieee8021q_6queue_tt_tc_map[tt];
120117
case 5:
121-
compiletime_assert(ARRAY_SIZE(ieee8021q_5queue_tt_tc_map) !=
122-
IEEE8021Q_TT_MAX - 1,
123-
"ieee8021q_5queue_tt_tc_map != max - 1");
124-
118+
TT_MAP_SIZE_OK(ieee8021q_5queue_tt_tc_map);
125119
return ieee8021q_5queue_tt_tc_map[tt];
126120
case 4:
127-
compiletime_assert(ARRAY_SIZE(ieee8021q_4queue_tt_tc_map) !=
128-
IEEE8021Q_TT_MAX - 1,
129-
"ieee8021q_4queue_tt_tc_map != max - 1");
130-
121+
TT_MAP_SIZE_OK(ieee8021q_4queue_tt_tc_map);
131122
return ieee8021q_4queue_tt_tc_map[tt];
132123
case 3:
133-
compiletime_assert(ARRAY_SIZE(ieee8021q_3queue_tt_tc_map) !=
134-
IEEE8021Q_TT_MAX - 1,
135-
"ieee8021q_3queue_tt_tc_map != max - 1");
136-
124+
TT_MAP_SIZE_OK(ieee8021q_3queue_tt_tc_map);
137125
return ieee8021q_3queue_tt_tc_map[tt];
138126
case 2:
139-
compiletime_assert(ARRAY_SIZE(ieee8021q_2queue_tt_tc_map) !=
140-
IEEE8021Q_TT_MAX - 1,
141-
"ieee8021q_2queue_tt_tc_map != max - 1");
142-
127+
TT_MAP_SIZE_OK(ieee8021q_2queue_tt_tc_map);
143128
return ieee8021q_2queue_tt_tc_map[tt];
144129
case 1:
145-
compiletime_assert(ARRAY_SIZE(ieee8021q_1queue_tt_tc_map) !=
146-
IEEE8021Q_TT_MAX - 1,
147-
"ieee8021q_1queue_tt_tc_map != max - 1");
148-
130+
TT_MAP_SIZE_OK(ieee8021q_1queue_tt_tc_map);
149131
return ieee8021q_1queue_tt_tc_map[tt];
150132
}
151133

0 commit comments

Comments
 (0)