forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 072de836f53be56a70cecf70b43ae43b7ce17376
kernel/net/nfc/netlink.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Copyright (C) 2011 Instituto Nokia de Tecnologia
34 *
....@@ -10,19 +11,6 @@
1011 *
1112 * Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
1213 * Copyright 2013-2014 Intel Mobile Communications GmbH
13
- *
14
- * This program is free software; you can redistribute it and/or modify
15
- * it under the terms of the GNU General Public License as published by
16
- * the Free Software Foundation; either version 2 of the License, or
17
- * (at your option) any later version.
18
- *
19
- * This program is distributed in the hope that it will be useful,
20
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
21
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22
- * GNU General Public License for more details.
23
- *
24
- * You should have received a copy of the GNU General Public License
25
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
2614 */
2715
2816 #define pr_fmt(fmt) KBUILD_MODNAME ": %s: " fmt, __func__
....@@ -118,21 +106,14 @@
118106
119107 static struct nfc_dev *__get_device_from_cb(struct netlink_callback *cb)
120108 {
121
- struct nlattr **attrbuf = genl_family_attrbuf(&nfc_genl_family);
109
+ const struct genl_dumpit_info *info = genl_dumpit_info(cb);
122110 struct nfc_dev *dev;
123
- int rc;
124111 u32 idx;
125112
126
- rc = nlmsg_parse(cb->nlh, GENL_HDRLEN + nfc_genl_family.hdrsize,
127
- attrbuf, nfc_genl_family.maxattr, nfc_genl_policy,
128
- NULL);
129
- if (rc < 0)
130
- return ERR_PTR(rc);
131
-
132
- if (!attrbuf[NFC_ATTR_DEVICE_INDEX])
113
+ if (!info->attrs[NFC_ATTR_DEVICE_INDEX])
133114 return ERR_PTR(-EINVAL);
134115
135
- idx = nla_get_u32(attrbuf[NFC_ATTR_DEVICE_INDEX]);
116
+ idx = nla_get_u32(info->attrs[NFC_ATTR_DEVICE_INDEX]);
136117
137118 dev = nfc_get_device(idx);
138119 if (!dev)
....@@ -396,7 +377,7 @@
396377 if (nla_put_u32(msg, NFC_ATTR_DEVICE_INDEX, dev->idx))
397378 goto nla_put_failure;
398379
399
- sdp_attr = nla_nest_start(msg, NFC_ATTR_LLC_SDP);
380
+ sdp_attr = nla_nest_start_noflag(msg, NFC_ATTR_LLC_SDP);
400381 if (sdp_attr == NULL) {
401382 rc = -ENOMEM;
402383 goto nla_put_failure;
....@@ -406,7 +387,7 @@
406387 hlist_for_each_entry_safe(sdres, n, sdres_list, node) {
407388 pr_debug("uri: %s, sap: %d\n", sdres->uri, sdres->sap);
408389
409
- uri_attr = nla_nest_start(msg, i++);
390
+ uri_attr = nla_nest_start_noflag(msg, i++);
410391 if (uri_attr == NULL) {
411392 rc = -ENOMEM;
412393 goto nla_put_failure;
....@@ -1185,8 +1166,9 @@
11851166 tlvs_len = 0;
11861167
11871168 nla_for_each_nested(attr, info->attrs[NFC_ATTR_LLC_SDP], rem) {
1188
- rc = nla_parse_nested(sdp_attrs, NFC_SDP_ATTR_MAX, attr,
1189
- nfc_sdp_genl_policy, info->extack);
1169
+ rc = nla_parse_nested_deprecated(sdp_attrs, NFC_SDP_ATTR_MAX,
1170
+ attr, nfc_sdp_genl_policy,
1171
+ info->extack);
11901172
11911173 if (rc != 0) {
11921174 rc = -EINVAL;
....@@ -1262,7 +1244,7 @@
12621244 struct sk_buff *msg;
12631245 void *hdr;
12641246
1265
- msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
1247
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_ATOMIC);
12661248 if (!msg)
12671249 return -ENOMEM;
12681250
....@@ -1278,7 +1260,7 @@
12781260
12791261 genlmsg_end(msg, hdr);
12801262
1281
- genlmsg_multicast(&nfc_genl_family, msg, 0, 0, GFP_KERNEL);
1263
+ genlmsg_multicast(&nfc_genl_family, msg, 0, 0, GFP_ATOMIC);
12821264
12831265 return 0;
12841266
....@@ -1677,102 +1659,103 @@
16771659 static const struct genl_ops nfc_genl_ops[] = {
16781660 {
16791661 .cmd = NFC_CMD_GET_DEVICE,
1662
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
16801663 .doit = nfc_genl_get_device,
16811664 .dumpit = nfc_genl_dump_devices,
16821665 .done = nfc_genl_dump_devices_done,
1683
- .policy = nfc_genl_policy,
16841666 },
16851667 {
16861668 .cmd = NFC_CMD_DEV_UP,
1669
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
16871670 .doit = nfc_genl_dev_up,
1688
- .policy = nfc_genl_policy,
16891671 },
16901672 {
16911673 .cmd = NFC_CMD_DEV_DOWN,
1674
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
16921675 .doit = nfc_genl_dev_down,
1693
- .policy = nfc_genl_policy,
16941676 },
16951677 {
16961678 .cmd = NFC_CMD_START_POLL,
1679
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
16971680 .doit = nfc_genl_start_poll,
1698
- .policy = nfc_genl_policy,
16991681 },
17001682 {
17011683 .cmd = NFC_CMD_STOP_POLL,
1684
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17021685 .doit = nfc_genl_stop_poll,
1703
- .policy = nfc_genl_policy,
17041686 },
17051687 {
17061688 .cmd = NFC_CMD_DEP_LINK_UP,
1689
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17071690 .doit = nfc_genl_dep_link_up,
1708
- .policy = nfc_genl_policy,
17091691 },
17101692 {
17111693 .cmd = NFC_CMD_DEP_LINK_DOWN,
1694
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17121695 .doit = nfc_genl_dep_link_down,
1713
- .policy = nfc_genl_policy,
17141696 },
17151697 {
17161698 .cmd = NFC_CMD_GET_TARGET,
1699
+ .validate = GENL_DONT_VALIDATE_STRICT |
1700
+ GENL_DONT_VALIDATE_DUMP_STRICT,
17171701 .dumpit = nfc_genl_dump_targets,
17181702 .done = nfc_genl_dump_targets_done,
1719
- .policy = nfc_genl_policy,
17201703 },
17211704 {
17221705 .cmd = NFC_CMD_LLC_GET_PARAMS,
1706
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17231707 .doit = nfc_genl_llc_get_params,
1724
- .policy = nfc_genl_policy,
17251708 },
17261709 {
17271710 .cmd = NFC_CMD_LLC_SET_PARAMS,
1711
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17281712 .doit = nfc_genl_llc_set_params,
1729
- .policy = nfc_genl_policy,
17301713 },
17311714 {
17321715 .cmd = NFC_CMD_LLC_SDREQ,
1716
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17331717 .doit = nfc_genl_llc_sdreq,
1734
- .policy = nfc_genl_policy,
17351718 },
17361719 {
17371720 .cmd = NFC_CMD_FW_DOWNLOAD,
1721
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17381722 .doit = nfc_genl_fw_download,
1739
- .policy = nfc_genl_policy,
17401723 },
17411724 {
17421725 .cmd = NFC_CMD_ENABLE_SE,
1726
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17431727 .doit = nfc_genl_enable_se,
1744
- .policy = nfc_genl_policy,
17451728 },
17461729 {
17471730 .cmd = NFC_CMD_DISABLE_SE,
1731
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17481732 .doit = nfc_genl_disable_se,
1749
- .policy = nfc_genl_policy,
17501733 },
17511734 {
17521735 .cmd = NFC_CMD_GET_SE,
1736
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17531737 .dumpit = nfc_genl_dump_ses,
17541738 .done = nfc_genl_dump_ses_done,
1755
- .policy = nfc_genl_policy,
17561739 },
17571740 {
17581741 .cmd = NFC_CMD_SE_IO,
1742
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17591743 .doit = nfc_genl_se_io,
1760
- .policy = nfc_genl_policy,
17611744 },
17621745 {
17631746 .cmd = NFC_CMD_ACTIVATE_TARGET,
1747
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17641748 .doit = nfc_genl_activate_target,
1765
- .policy = nfc_genl_policy,
17661749 },
17671750 {
17681751 .cmd = NFC_CMD_VENDOR,
1752
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17691753 .doit = nfc_genl_vendor_cmd,
1770
- .policy = nfc_genl_policy,
17711754 },
17721755 {
17731756 .cmd = NFC_CMD_DEACTIVATE_TARGET,
1757
+ .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
17741758 .doit = nfc_genl_deactivate_target,
1775
- .policy = nfc_genl_policy,
17761759 },
17771760 };
17781761
....@@ -1781,6 +1764,7 @@
17811764 .name = NFC_GENL_NAME,
17821765 .version = NFC_GENL_VERSION,
17831766 .maxattr = NFC_ATTR_MAX,
1767
+ .policy = nfc_genl_policy,
17841768 .module = THIS_MODULE,
17851769 .ops = nfc_genl_ops,
17861770 .n_ops = ARRAY_SIZE(nfc_genl_ops),