Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <rubenkelevra@gmail.com>
Link: https://patch.msgid.link/20250626205907.1566384-1-rubenkelevra@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>

authored by

RubenKelevra and committed by
Paolo Abeni
21deb2d9 8b79380d

+13 -31
+13 -31
net/core/ieee8021q_helpers.c
··· 7 7 #include <net/dscp.h> 8 8 #include <net/ieee8021q.h> 9 9 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 + 10 15 /* The following arrays map Traffic Types (TT) to traffic classes (TC) for 11 16 * different number of queues as shown in the example provided by 12 17 * IEEE 802.1Q-2022 in Annex I "I.3 Traffic type to traffic class mapping" and ··· 106 101 107 102 switch (num_queues) { 108 103 case 8: 109 - compiletime_assert(ARRAY_SIZE(ieee8021q_8queue_tt_tc_map) != 110 - IEEE8021Q_TT_MAX - 1, 111 - "ieee8021q_8queue_tt_tc_map != max - 1"); 104 + TT_MAP_SIZE_OK(ieee8021q_8queue_tt_tc_map); 112 105 return ieee8021q_8queue_tt_tc_map[tt]; 113 106 case 7: 114 - compiletime_assert(ARRAY_SIZE(ieee8021q_7queue_tt_tc_map) != 115 - IEEE8021Q_TT_MAX - 1, 116 - "ieee8021q_7queue_tt_tc_map != max - 1"); 117 - 107 + TT_MAP_SIZE_OK(ieee8021q_7queue_tt_tc_map); 118 108 return ieee8021q_7queue_tt_tc_map[tt]; 119 109 case 6: 120 - compiletime_assert(ARRAY_SIZE(ieee8021q_6queue_tt_tc_map) != 121 - IEEE8021Q_TT_MAX - 1, 122 - "ieee8021q_6queue_tt_tc_map != max - 1"); 123 - 110 + TT_MAP_SIZE_OK(ieee8021q_6queue_tt_tc_map); 124 111 return ieee8021q_6queue_tt_tc_map[tt]; 125 112 case 5: 126 - compiletime_assert(ARRAY_SIZE(ieee8021q_5queue_tt_tc_map) != 127 - IEEE8021Q_TT_MAX - 1, 128 - "ieee8021q_5queue_tt_tc_map != max - 1"); 129 - 113 + TT_MAP_SIZE_OK(ieee8021q_5queue_tt_tc_map); 130 114 return ieee8021q_5queue_tt_tc_map[tt]; 131 115 case 4: 132 - compiletime_assert(ARRAY_SIZE(ieee8021q_4queue_tt_tc_map) != 133 - IEEE8021Q_TT_MAX - 1, 134 - "ieee8021q_4queue_tt_tc_map != max - 1"); 135 - 116 + TT_MAP_SIZE_OK(ieee8021q_4queue_tt_tc_map); 136 117 return ieee8021q_4queue_tt_tc_map[tt]; 137 118 case 3: 138 - compiletime_assert(ARRAY_SIZE(ieee8021q_3queue_tt_tc_map) != 139 - IEEE8021Q_TT_MAX - 1, 140 - "ieee8021q_3queue_tt_tc_map != max - 1"); 141 - 119 + TT_MAP_SIZE_OK(ieee8021q_3queue_tt_tc_map); 142 120 return ieee8021q_3queue_tt_tc_map[tt]; 143 121 case 2: 144 - compiletime_assert(ARRAY_SIZE(ieee8021q_2queue_tt_tc_map) != 145 - IEEE8021Q_TT_MAX - 1, 146 - "ieee8021q_2queue_tt_tc_map != max - 1"); 147 - 122 + TT_MAP_SIZE_OK(ieee8021q_2queue_tt_tc_map); 148 123 return ieee8021q_2queue_tt_tc_map[tt]; 149 124 case 1: 150 - compiletime_assert(ARRAY_SIZE(ieee8021q_1queue_tt_tc_map) != 151 - IEEE8021Q_TT_MAX - 1, 152 - "ieee8021q_1queue_tt_tc_map != max - 1"); 153 - 125 + TT_MAP_SIZE_OK(ieee8021q_1queue_tt_tc_map); 154 126 return ieee8021q_1queue_tt_tc_map[tt]; 155 127 } 156 128