.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * NetLabel CIPSO/IPv4 Support |
---|
3 | 4 | * |
---|
.. | .. |
---|
6 | 7 | * 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 |
---|
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> |
---|
.. | .. |
---|
99 | 85 | |
---|
100 | 86 | doi_def->doi = nla_get_u32(info->attrs[NLBL_CIPSOV4_A_DOI]); |
---|
101 | 87 | |
---|
102 | | - if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_TAGLST], |
---|
103 | | - NLBL_CIPSOV4_A_MAX, |
---|
104 | | - netlbl_cipsov4_genl_policy, NULL) != 0) |
---|
| 88 | + if (nla_validate_nested_deprecated(info->attrs[NLBL_CIPSOV4_A_TAGLST], |
---|
| 89 | + NLBL_CIPSOV4_A_MAX, |
---|
| 90 | + netlbl_cipsov4_genl_policy, |
---|
| 91 | + NULL) != 0) |
---|
105 | 92 | return -EINVAL; |
---|
106 | 93 | |
---|
107 | 94 | nla_for_each_nested(nla, info->attrs[NLBL_CIPSOV4_A_TAGLST], nla_rem) |
---|
.. | .. |
---|
146 | 133 | !info->attrs[NLBL_CIPSOV4_A_MLSLVLLST]) |
---|
147 | 134 | return -EINVAL; |
---|
148 | 135 | |
---|
149 | | - if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], |
---|
150 | | - NLBL_CIPSOV4_A_MAX, |
---|
151 | | - netlbl_cipsov4_genl_policy, NULL) != 0) |
---|
| 136 | + if (nla_validate_nested_deprecated(info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], |
---|
| 137 | + NLBL_CIPSOV4_A_MAX, |
---|
| 138 | + netlbl_cipsov4_genl_policy, |
---|
| 139 | + NULL) != 0) |
---|
152 | 140 | return -EINVAL; |
---|
153 | 141 | |
---|
154 | 142 | doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL); |
---|
.. | .. |
---|
170 | 158 | info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], |
---|
171 | 159 | nla_a_rem) |
---|
172 | 160 | if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSLVL) { |
---|
173 | | - if (nla_validate_nested(nla_a, NLBL_CIPSOV4_A_MAX, |
---|
174 | | - netlbl_cipsov4_genl_policy, |
---|
175 | | - NULL) != 0) |
---|
| 161 | + if (nla_validate_nested_deprecated(nla_a, |
---|
| 162 | + NLBL_CIPSOV4_A_MAX, |
---|
| 163 | + netlbl_cipsov4_genl_policy, |
---|
| 164 | + NULL) != 0) |
---|
176 | 165 | goto add_std_failure; |
---|
177 | 166 | nla_for_each_nested(nla_b, nla_a, nla_b_rem) |
---|
178 | 167 | switch (nla_type(nla_b)) { |
---|
.. | .. |
---|
234 | 223 | } |
---|
235 | 224 | |
---|
236 | 225 | if (info->attrs[NLBL_CIPSOV4_A_MLSCATLST]) { |
---|
237 | | - if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSCATLST], |
---|
238 | | - NLBL_CIPSOV4_A_MAX, |
---|
239 | | - netlbl_cipsov4_genl_policy, NULL) != 0) |
---|
| 226 | + if (nla_validate_nested_deprecated(info->attrs[NLBL_CIPSOV4_A_MLSCATLST], |
---|
| 227 | + NLBL_CIPSOV4_A_MAX, |
---|
| 228 | + netlbl_cipsov4_genl_policy, |
---|
| 229 | + NULL) != 0) |
---|
240 | 230 | goto add_std_failure; |
---|
241 | 231 | |
---|
242 | 232 | nla_for_each_nested(nla_a, |
---|
243 | 233 | info->attrs[NLBL_CIPSOV4_A_MLSCATLST], |
---|
244 | 234 | nla_a_rem) |
---|
245 | 235 | if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSCAT) { |
---|
246 | | - if (nla_validate_nested(nla_a, |
---|
247 | | - NLBL_CIPSOV4_A_MAX, |
---|
248 | | - netlbl_cipsov4_genl_policy, |
---|
249 | | - NULL) != 0) |
---|
| 236 | + if (nla_validate_nested_deprecated(nla_a, |
---|
| 237 | + NLBL_CIPSOV4_A_MAX, |
---|
| 238 | + netlbl_cipsov4_genl_policy, |
---|
| 239 | + NULL) != 0) |
---|
250 | 240 | goto add_std_failure; |
---|
251 | 241 | nla_for_each_nested(nla_b, nla_a, nla_b_rem) |
---|
252 | 242 | switch (nla_type(nla_b)) { |
---|
.. | .. |
---|
498 | 488 | if (ret_val != 0) |
---|
499 | 489 | goto list_failure_lock; |
---|
500 | 490 | |
---|
501 | | - nla_a = nla_nest_start(ans_skb, NLBL_CIPSOV4_A_TAGLST); |
---|
| 491 | + nla_a = nla_nest_start_noflag(ans_skb, NLBL_CIPSOV4_A_TAGLST); |
---|
502 | 492 | if (nla_a == NULL) { |
---|
503 | 493 | ret_val = -ENOMEM; |
---|
504 | 494 | goto list_failure_lock; |
---|
.. | .. |
---|
517 | 507 | |
---|
518 | 508 | switch (doi_def->type) { |
---|
519 | 509 | case CIPSO_V4_MAP_TRANS: |
---|
520 | | - nla_a = nla_nest_start(ans_skb, NLBL_CIPSOV4_A_MLSLVLLST); |
---|
| 510 | + nla_a = nla_nest_start_noflag(ans_skb, |
---|
| 511 | + NLBL_CIPSOV4_A_MLSLVLLST); |
---|
521 | 512 | if (nla_a == NULL) { |
---|
522 | 513 | ret_val = -ENOMEM; |
---|
523 | 514 | goto list_failure_lock; |
---|
.. | .. |
---|
529 | 520 | CIPSO_V4_INV_LVL) |
---|
530 | 521 | continue; |
---|
531 | 522 | |
---|
532 | | - nla_b = nla_nest_start(ans_skb, NLBL_CIPSOV4_A_MLSLVL); |
---|
| 523 | + nla_b = nla_nest_start_noflag(ans_skb, |
---|
| 524 | + NLBL_CIPSOV4_A_MLSLVL); |
---|
533 | 525 | if (nla_b == NULL) { |
---|
534 | 526 | ret_val = -ENOMEM; |
---|
535 | 527 | goto list_retry; |
---|
.. | .. |
---|
548 | 540 | } |
---|
549 | 541 | nla_nest_end(ans_skb, nla_a); |
---|
550 | 542 | |
---|
551 | | - nla_a = nla_nest_start(ans_skb, NLBL_CIPSOV4_A_MLSCATLST); |
---|
| 543 | + nla_a = nla_nest_start_noflag(ans_skb, |
---|
| 544 | + NLBL_CIPSOV4_A_MLSCATLST); |
---|
552 | 545 | if (nla_a == NULL) { |
---|
553 | 546 | ret_val = -ENOMEM; |
---|
554 | 547 | goto list_retry; |
---|
.. | .. |
---|
560 | 553 | CIPSO_V4_INV_CAT) |
---|
561 | 554 | continue; |
---|
562 | 555 | |
---|
563 | | - nla_b = nla_nest_start(ans_skb, NLBL_CIPSOV4_A_MLSCAT); |
---|
| 556 | + nla_b = nla_nest_start_noflag(ans_skb, |
---|
| 557 | + NLBL_CIPSOV4_A_MLSCAT); |
---|
564 | 558 | if (nla_b == NULL) { |
---|
565 | 559 | ret_val = -ENOMEM; |
---|
566 | 560 | goto list_retry; |
---|
.. | .. |
---|
733 | 727 | * NetLabel Generic NETLINK Command Definitions |
---|
734 | 728 | */ |
---|
735 | 729 | |
---|
736 | | -static const struct genl_ops netlbl_cipsov4_ops[] = { |
---|
| 730 | +static const struct genl_small_ops netlbl_cipsov4_ops[] = { |
---|
737 | 731 | { |
---|
738 | 732 | .cmd = NLBL_CIPSOV4_C_ADD, |
---|
| 733 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
739 | 734 | .flags = GENL_ADMIN_PERM, |
---|
740 | | - .policy = netlbl_cipsov4_genl_policy, |
---|
741 | 735 | .doit = netlbl_cipsov4_add, |
---|
742 | 736 | .dumpit = NULL, |
---|
743 | 737 | }, |
---|
744 | 738 | { |
---|
745 | 739 | .cmd = NLBL_CIPSOV4_C_REMOVE, |
---|
| 740 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
746 | 741 | .flags = GENL_ADMIN_PERM, |
---|
747 | | - .policy = netlbl_cipsov4_genl_policy, |
---|
748 | 742 | .doit = netlbl_cipsov4_remove, |
---|
749 | 743 | .dumpit = NULL, |
---|
750 | 744 | }, |
---|
751 | 745 | { |
---|
752 | 746 | .cmd = NLBL_CIPSOV4_C_LIST, |
---|
| 747 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
753 | 748 | .flags = 0, |
---|
754 | | - .policy = netlbl_cipsov4_genl_policy, |
---|
755 | 749 | .doit = netlbl_cipsov4_list, |
---|
756 | 750 | .dumpit = NULL, |
---|
757 | 751 | }, |
---|
758 | 752 | { |
---|
759 | 753 | .cmd = NLBL_CIPSOV4_C_LISTALL, |
---|
| 754 | + .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, |
---|
760 | 755 | .flags = 0, |
---|
761 | | - .policy = netlbl_cipsov4_genl_policy, |
---|
762 | 756 | .doit = NULL, |
---|
763 | 757 | .dumpit = netlbl_cipsov4_listall, |
---|
764 | 758 | }, |
---|
.. | .. |
---|
769 | 763 | .name = NETLBL_NLTYPE_CIPSOV4_NAME, |
---|
770 | 764 | .version = NETLBL_PROTO_VERSION, |
---|
771 | 765 | .maxattr = NLBL_CIPSOV4_A_MAX, |
---|
| 766 | + .policy = netlbl_cipsov4_genl_policy, |
---|
772 | 767 | .module = THIS_MODULE, |
---|
773 | | - .ops = netlbl_cipsov4_ops, |
---|
774 | | - .n_ops = ARRAY_SIZE(netlbl_cipsov4_ops), |
---|
| 768 | + .small_ops = netlbl_cipsov4_ops, |
---|
| 769 | + .n_small_ops = ARRAY_SIZE(netlbl_cipsov4_ops), |
---|
775 | 770 | }; |
---|
776 | 771 | |
---|
777 | 772 | /* |
---|