| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * NetLabel Unlabeled Support |
|---|
| 3 | 4 | * |
|---|
| .. | .. |
|---|
| 6 | 7 | * mappings for network protocols such as CIPSO and RIPSO. |
|---|
| 7 | 8 | * |
|---|
| 8 | 9 | * Author: Paul Moore <paul@paul-moore.com> |
|---|
| 9 | | - * |
|---|
| 10 | 10 | */ |
|---|
| 11 | 11 | |
|---|
| 12 | 12 | /* |
|---|
| 13 | 13 | * (c) Copyright Hewlett-Packard Development Company, L.P., 2006 - 2008 |
|---|
| 14 | | - * |
|---|
| 15 | | - * This program is free software; you can redistribute it and/or modify |
|---|
| 16 | | - * it under the terms of the GNU General Public License as published by |
|---|
| 17 | | - * the Free Software Foundation; either version 2 of the License, or |
|---|
| 18 | | - * (at your option) any later version. |
|---|
| 19 | | - * |
|---|
| 20 | | - * This program is distributed in the hope that it will be useful, |
|---|
| 21 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|---|
| 22 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See |
|---|
| 23 | | - * the GNU General Public License for more details. |
|---|
| 24 | | - * |
|---|
| 25 | | - * You should have received a copy of the GNU General Public License |
|---|
| 26 | | - * along with this program; if not, see <http://www.gnu.org/licenses/>. |
|---|
| 27 | | - * |
|---|
| 28 | 14 | */ |
|---|
| 29 | 15 | |
|---|
| 30 | 16 | #include <linux/types.h> |
|---|
| .. | .. |
|---|
| 221 | 207 | |
|---|
| 222 | 208 | bkt = netlbl_unlhsh_hash(ifindex); |
|---|
| 223 | 209 | bkt_list = &netlbl_unlhsh_rcu_deref(netlbl_unlhsh)->tbl[bkt]; |
|---|
| 224 | | - list_for_each_entry_rcu(iter, bkt_list, list) |
|---|
| 210 | + list_for_each_entry_rcu(iter, bkt_list, list, |
|---|
| 211 | + lockdep_is_held(&netlbl_unlhsh_lock)) |
|---|
| 225 | 212 | if (iter->valid && iter->ifindex == ifindex) |
|---|
| 226 | 213 | return iter; |
|---|
| 227 | 214 | |
|---|
| .. | .. |
|---|
| 1321 | 1308 | * NetLabel Generic NETLINK Command Definitions |
|---|
| 1322 | 1309 | */ |
|---|
| 1323 | 1310 | |
|---|
| 1324 | | -static const struct genl_ops netlbl_unlabel_genl_ops[] = { |
|---|
| 1311 | +static const struct genl_small_ops netlbl_unlabel_genl_ops[] = { |
|---|
| 1325 | 1312 | { |
|---|
| 1326 | 1313 | .cmd = NLBL_UNLABEL_C_STATICADD, |
|---|
| 1314 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1327 | 1315 | .flags = GENL_ADMIN_PERM, |
|---|
| 1328 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1329 | 1316 | .doit = netlbl_unlabel_staticadd, |
|---|
| 1330 | 1317 | .dumpit = NULL, |
|---|
| 1331 | 1318 | }, |
|---|
| 1332 | 1319 | { |
|---|
| 1333 | 1320 | .cmd = NLBL_UNLABEL_C_STATICREMOVE, |
|---|
| 1321 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1334 | 1322 | .flags = GENL_ADMIN_PERM, |
|---|
| 1335 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1336 | 1323 | .doit = netlbl_unlabel_staticremove, |
|---|
| 1337 | 1324 | .dumpit = NULL, |
|---|
| 1338 | 1325 | }, |
|---|
| 1339 | 1326 | { |
|---|
| 1340 | 1327 | .cmd = NLBL_UNLABEL_C_STATICLIST, |
|---|
| 1328 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1341 | 1329 | .flags = 0, |
|---|
| 1342 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1343 | 1330 | .doit = NULL, |
|---|
| 1344 | 1331 | .dumpit = netlbl_unlabel_staticlist, |
|---|
| 1345 | 1332 | }, |
|---|
| 1346 | 1333 | { |
|---|
| 1347 | 1334 | .cmd = NLBL_UNLABEL_C_STATICADDDEF, |
|---|
| 1335 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1348 | 1336 | .flags = GENL_ADMIN_PERM, |
|---|
| 1349 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1350 | 1337 | .doit = netlbl_unlabel_staticadddef, |
|---|
| 1351 | 1338 | .dumpit = NULL, |
|---|
| 1352 | 1339 | }, |
|---|
| 1353 | 1340 | { |
|---|
| 1354 | 1341 | .cmd = NLBL_UNLABEL_C_STATICREMOVEDEF, |
|---|
| 1342 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1355 | 1343 | .flags = GENL_ADMIN_PERM, |
|---|
| 1356 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1357 | 1344 | .doit = netlbl_unlabel_staticremovedef, |
|---|
| 1358 | 1345 | .dumpit = NULL, |
|---|
| 1359 | 1346 | }, |
|---|
| 1360 | 1347 | { |
|---|
| 1361 | 1348 | .cmd = NLBL_UNLABEL_C_STATICLISTDEF, |
|---|
| 1349 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1362 | 1350 | .flags = 0, |
|---|
| 1363 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1364 | 1351 | .doit = NULL, |
|---|
| 1365 | 1352 | .dumpit = netlbl_unlabel_staticlistdef, |
|---|
| 1366 | 1353 | }, |
|---|
| 1367 | 1354 | { |
|---|
| 1368 | 1355 | .cmd = NLBL_UNLABEL_C_ACCEPT, |
|---|
| 1356 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1369 | 1357 | .flags = GENL_ADMIN_PERM, |
|---|
| 1370 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1371 | 1358 | .doit = netlbl_unlabel_accept, |
|---|
| 1372 | 1359 | .dumpit = NULL, |
|---|
| 1373 | 1360 | }, |
|---|
| 1374 | 1361 | { |
|---|
| 1375 | 1362 | .cmd = NLBL_UNLABEL_C_LIST, |
|---|
| 1363 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
|---|
| 1376 | 1364 | .flags = 0, |
|---|
| 1377 | | - .policy = netlbl_unlabel_genl_policy, |
|---|
| 1378 | 1365 | .doit = netlbl_unlabel_list, |
|---|
| 1379 | 1366 | .dumpit = NULL, |
|---|
| 1380 | 1367 | }, |
|---|
| .. | .. |
|---|
| 1385 | 1372 | .name = NETLBL_NLTYPE_UNLABELED_NAME, |
|---|
| 1386 | 1373 | .version = NETLBL_PROTO_VERSION, |
|---|
| 1387 | 1374 | .maxattr = NLBL_UNLABEL_A_MAX, |
|---|
| 1375 | + .policy = netlbl_unlabel_genl_policy, |
|---|
| 1388 | 1376 | .module = THIS_MODULE, |
|---|
| 1389 | | - .ops = netlbl_unlabel_genl_ops, |
|---|
| 1390 | | - .n_ops = ARRAY_SIZE(netlbl_unlabel_genl_ops), |
|---|
| 1377 | + .small_ops = netlbl_unlabel_genl_ops, |
|---|
| 1378 | + .n_small_ops = ARRAY_SIZE(netlbl_unlabel_genl_ops), |
|---|
| 1391 | 1379 | }; |
|---|
| 1392 | 1380 | |
|---|
| 1393 | 1381 | /* |
|---|