Hello Florian Westphal, Commit 17a20e09f086 ("netfilter: nft_set: remove one argument from lookup and update functions") from Jul 9, 2025 (linux-next), leads to the following Smatch static checker warning: net/netfilter/nft_set_pipapo_avx2.c:1269 nft_pipapo_avx2_lookup() error: uninitialized symbol 'ext'. net/netfilter/nft_set_pipapo_avx2.c 1148 const struct nft_set_ext * 1149 nft_pipapo_avx2_lookup(const struct net *net, const struct nft_set *set, 1150 const u32 *key) 1151 { 1152 struct nft_pipapo *priv = nft_set_priv(set); 1153 struct nft_pipapo_scratch *scratch; 1154 u8 genmask = nft_genmask_cur(net); 1155 const struct nft_pipapo_match *m; 1156 const struct nft_pipapo_field *f; 1157 const u8 *rp = (const u8 *)key; 1158 const struct nft_set_ext *ext; 1159 unsigned long *res, *fill; 1160 bool map_index; 1161 int i; 1162 1163 local_bh_disable(); 1164 1165 if (unlikely(!irq_fpu_usable())) { 1166 ext = nft_pipapo_lookup(net, set, key); 1167 1168 local_bh_enable(); 1169 return ext; 1170 } 1171 1172 m = rcu_dereference(priv->match); 1173 1174 /* This also protects access to all data related to scratch maps. 1175 * 1176 * Note that we don't need a valid MXCSR state for any of the 1177 * operations we use here, so pass 0 as mask and spare a LDMXCSR 1178 * instruction. 1179 */ 1180 kernel_fpu_begin_mask(0); 1181 1182 scratch = *raw_cpu_ptr(m->scratch); 1183 if (unlikely(!scratch)) { 1184 kernel_fpu_end(); 1185 local_bh_enable(); 1186 return NULL; 1187 } 1188 1189 map_index = scratch->map_index; 1190 1191 res = scratch->map + (map_index ? m->bsize_max : 0); 1192 fill = scratch->map + (map_index ? 0 : m->bsize_max); 1193 1194 pipapo_resmap_init_avx2(m, res); 1195 1196 nft_pipapo_avx2_prepare(); 1197 1198 next_match: 1199 nft_pipapo_for_each_field(f, i, m) { 1200 bool last = i == m->field_count - 1, first = !i; 1201 int ret = 0; 1202 1203 #define NFT_SET_PIPAPO_AVX2_LOOKUP(b, n) \ 1204 (ret = nft_pipapo_avx2_lookup_##b##b_##n(res, fill, f, \ 1205 ret, rp, \ 1206 first, last)) 1207 1208 if (likely(f->bb == 8)) { 1209 if (f->groups == 1) { 1210 NFT_SET_PIPAPO_AVX2_LOOKUP(8, 1); 1211 } else if (f->groups == 2) { 1212 NFT_SET_PIPAPO_AVX2_LOOKUP(8, 2); 1213 } else if (f->groups == 4) { 1214 NFT_SET_PIPAPO_AVX2_LOOKUP(8, 4); 1215 } else if (f->groups == 6) { 1216 NFT_SET_PIPAPO_AVX2_LOOKUP(8, 6); 1217 } else if (f->groups == 16) { 1218 NFT_SET_PIPAPO_AVX2_LOOKUP(8, 16); 1219 } else { 1220 ret = nft_pipapo_avx2_lookup_slow(m, res, fill, f, 1221 ret, rp, 1222 first, last); 1223 } 1224 } else { 1225 if (f->groups == 2) { 1226 NFT_SET_PIPAPO_AVX2_LOOKUP(4, 2); 1227 } else if (f->groups == 4) { 1228 NFT_SET_PIPAPO_AVX2_LOOKUP(4, 4); 1229 } else if (f->groups == 8) { 1230 NFT_SET_PIPAPO_AVX2_LOOKUP(4, 8); 1231 } else if (f->groups == 12) { 1232 NFT_SET_PIPAPO_AVX2_LOOKUP(4, 12); 1233 } else if (f->groups == 32) { 1234 NFT_SET_PIPAPO_AVX2_LOOKUP(4, 32); 1235 } else { 1236 ret = nft_pipapo_avx2_lookup_slow(m, res, fill, f, 1237 ret, rp, 1238 first, last); 1239 } 1240 } 1241 NFT_PIPAPO_GROUP_BITS_ARE_8_OR_4; 1242 1243 #undef NFT_SET_PIPAPO_AVX2_LOOKUP 1244 1245 if (ret < 0) 1246 goto out; Needs an "ext = NULL;"? 1247 1248 if (last) { 1249 ext = &f->mt[ret].e->ext; 1250 if (unlikely(nft_set_elem_expired(ext) || 1251 !nft_set_elem_active(ext, genmask))) { 1252 ext = NULL; 1253 goto next_match; 1254 } 1255 1256 goto out; 1257 } 1258 1259 swap(res, fill); 1260 rp += NFT_PIPAPO_GROUPS_PADDED_SIZE(f); 1261 } 1262 1263 out: 1264 if (i % 2) 1265 scratch->map_index = !map_index; 1266 kernel_fpu_end(); 1267 local_bh_enable(); 1268 --> 1269 return ext; 1270 } regards, dan carpenter