diff options
129 files changed, 477 insertions, 391 deletions
diff --git a/crypto/crypto_user.c b/crypto/crypto_user.c index 4a44830741c1..fc79906c1fe7 100644 --- a/crypto/crypto_user.c +++ b/crypto/crypto_user.c | |||
@@ -523,7 +523,7 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
523 | } | 523 | } |
524 | 524 | ||
525 | err = nlmsg_parse(nlh, crypto_msg_min[type], attrs, CRYPTOCFGA_MAX, | 525 | err = nlmsg_parse(nlh, crypto_msg_min[type], attrs, CRYPTOCFGA_MAX, |
526 | crypto_policy); | 526 | crypto_policy, NULL); |
527 | if (err < 0) | 527 | if (err < 0) |
528 | return err; | 528 | return err; |
529 | 529 | ||
diff --git a/drivers/block/drbd/drbd_nla.c b/drivers/block/drbd/drbd_nla.c index b2d4791498a6..6bf806df60dc 100644 --- a/drivers/block/drbd/drbd_nla.c +++ b/drivers/block/drbd/drbd_nla.c | |||
@@ -34,7 +34,7 @@ int drbd_nla_parse_nested(struct nlattr *tb[], int maxtype, struct nlattr *nla, | |||
34 | 34 | ||
35 | err = drbd_nla_check_mandatory(maxtype, nla); | 35 | err = drbd_nla_check_mandatory(maxtype, nla); |
36 | if (!err) | 36 | if (!err) |
37 | err = nla_parse_nested(tb, maxtype, nla, policy); | 37 | err = nla_parse_nested(tb, maxtype, nla, policy, NULL); |
38 | 38 | ||
39 | return err; | 39 | return err; |
40 | } | 40 | } |
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c index 0f58f46dbad7..329d08c884f6 100644 --- a/drivers/infiniband/core/addr.c +++ b/drivers/infiniband/core/addr.c | |||
@@ -88,7 +88,7 @@ static inline bool ib_nl_is_good_ip_resp(const struct nlmsghdr *nlh) | |||
88 | return false; | 88 | return false; |
89 | 89 | ||
90 | ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh), | 90 | ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh), |
91 | nlmsg_len(nlh), ib_nl_addr_policy); | 91 | nlmsg_len(nlh), ib_nl_addr_policy, NULL); |
92 | if (ret) | 92 | if (ret) |
93 | return false; | 93 | return false; |
94 | 94 | ||
diff --git a/drivers/infiniband/core/iwpm_util.c b/drivers/infiniband/core/iwpm_util.c index 3ef51a96bbf1..f13870e69ccd 100644 --- a/drivers/infiniband/core/iwpm_util.c +++ b/drivers/infiniband/core/iwpm_util.c | |||
@@ -472,12 +472,14 @@ int iwpm_parse_nlmsg(struct netlink_callback *cb, int policy_max, | |||
472 | int ret; | 472 | int ret; |
473 | const char *err_str = ""; | 473 | const char *err_str = ""; |
474 | 474 | ||
475 | ret = nlmsg_validate(cb->nlh, nlh_len, policy_max-1, nlmsg_policy); | 475 | ret = nlmsg_validate(cb->nlh, nlh_len, policy_max - 1, nlmsg_policy, |
476 | NULL); | ||
476 | if (ret) { | 477 | if (ret) { |
477 | err_str = "Invalid attribute"; | 478 | err_str = "Invalid attribute"; |
478 | goto parse_nlmsg_error; | 479 | goto parse_nlmsg_error; |
479 | } | 480 | } |
480 | ret = nlmsg_parse(cb->nlh, nlh_len, nltb, policy_max-1, nlmsg_policy); | 481 | ret = nlmsg_parse(cb->nlh, nlh_len, nltb, policy_max - 1, |
482 | nlmsg_policy, NULL); | ||
481 | if (ret) { | 483 | if (ret) { |
482 | err_str = "Unable to parse the nlmsg"; | 484 | err_str = "Unable to parse the nlmsg"; |
483 | goto parse_nlmsg_error; | 485 | goto parse_nlmsg_error; |
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c index 81b742ca1639..ceae153997d0 100644 --- a/drivers/infiniband/core/sa_query.c +++ b/drivers/infiniband/core/sa_query.c | |||
@@ -808,7 +808,7 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb, | |||
808 | return -EPERM; | 808 | return -EPERM; |
809 | 809 | ||
810 | ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh), | 810 | ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh), |
811 | nlmsg_len(nlh), ib_nl_policy); | 811 | nlmsg_len(nlh), ib_nl_policy, NULL); |
812 | attr = (const struct nlattr *)tb[LS_NLA_TYPE_TIMEOUT]; | 812 | attr = (const struct nlattr *)tb[LS_NLA_TYPE_TIMEOUT]; |
813 | if (ret || !attr) | 813 | if (ret || !attr) |
814 | goto settimeout_out; | 814 | goto settimeout_out; |
@@ -860,7 +860,7 @@ static inline int ib_nl_is_good_resolve_resp(const struct nlmsghdr *nlh) | |||
860 | return 0; | 860 | return 0; |
861 | 861 | ||
862 | ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh), | 862 | ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh), |
863 | nlmsg_len(nlh), ib_nl_policy); | 863 | nlmsg_len(nlh), ib_nl_policy, NULL); |
864 | if (ret) | 864 | if (ret) |
865 | return 0; | 865 | return 0; |
866 | 866 | ||
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index ff0a5ed3ca80..9eb7a69be92a 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c | |||
@@ -1590,8 +1590,9 @@ static int parse_sa_config(struct nlattr **attrs, struct nlattr **tb_sa) | |||
1590 | if (!attrs[MACSEC_ATTR_SA_CONFIG]) | 1590 | if (!attrs[MACSEC_ATTR_SA_CONFIG]) |
1591 | return -EINVAL; | 1591 | return -EINVAL; |
1592 | 1592 | ||
1593 | if (nla_parse_nested(tb_sa, MACSEC_SA_ATTR_MAX, attrs[MACSEC_ATTR_SA_CONFIG], | 1593 | if (nla_parse_nested(tb_sa, MACSEC_SA_ATTR_MAX, |
1594 | macsec_genl_sa_policy)) | 1594 | attrs[MACSEC_ATTR_SA_CONFIG], |
1595 | macsec_genl_sa_policy, NULL)) | ||
1595 | return -EINVAL; | 1596 | return -EINVAL; |
1596 | 1597 | ||
1597 | return 0; | 1598 | return 0; |
@@ -1602,8 +1603,9 @@ static int parse_rxsc_config(struct nlattr **attrs, struct nlattr **tb_rxsc) | |||
1602 | if (!attrs[MACSEC_ATTR_RXSC_CONFIG]) | 1603 | if (!attrs[MACSEC_ATTR_RXSC_CONFIG]) |
1603 | return -EINVAL; | 1604 | return -EINVAL; |
1604 | 1605 | ||
1605 | if (nla_parse_nested(tb_rxsc, MACSEC_RXSC_ATTR_MAX, attrs[MACSEC_ATTR_RXSC_CONFIG], | 1606 | if (nla_parse_nested(tb_rxsc, MACSEC_RXSC_ATTR_MAX, |
1606 | macsec_genl_rxsc_policy)) | 1607 | attrs[MACSEC_ATTR_RXSC_CONFIG], |
1608 | macsec_genl_rxsc_policy, NULL)) | ||
1607 | return -EINVAL; | 1609 | return -EINVAL; |
1608 | 1610 | ||
1609 | return 0; | 1611 | return 0; |
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 1b52520715ae..86f227124ba1 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c | |||
@@ -2471,7 +2471,7 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info) | |||
2471 | goto team_put; | 2471 | goto team_put; |
2472 | } | 2472 | } |
2473 | err = nla_parse_nested(opt_attrs, TEAM_ATTR_OPTION_MAX, | 2473 | err = nla_parse_nested(opt_attrs, TEAM_ATTR_OPTION_MAX, |
2474 | nl_option, team_nl_option_policy); | 2474 | nl_option, team_nl_option_policy, NULL); |
2475 | if (err) | 2475 | if (err) |
2476 | goto team_put; | 2476 | goto team_put; |
2477 | if (!opt_attrs[TEAM_ATTR_OPTION_NAME] || | 2477 | if (!opt_attrs[TEAM_ATTR_OPTION_NAME] || |
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 317103680675..38f0f03a29c8 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c | |||
@@ -368,7 +368,8 @@ static int veth_newlink(struct net *src_net, struct net_device *dev, | |||
368 | ifmp = nla_data(nla_peer); | 368 | ifmp = nla_data(nla_peer); |
369 | err = rtnl_nla_parse_ifla(peer_tb, | 369 | err = rtnl_nla_parse_ifla(peer_tb, |
370 | nla_data(nla_peer) + sizeof(struct ifinfomsg), | 370 | nla_data(nla_peer) + sizeof(struct ifinfomsg), |
371 | nla_len(nla_peer) - sizeof(struct ifinfomsg)); | 371 | nla_len(nla_peer) - sizeof(struct ifinfomsg), |
372 | NULL); | ||
372 | if (err < 0) | 373 | if (err < 0) |
373 | return err; | 374 | return err; |
374 | 375 | ||
diff --git a/drivers/net/wireless/ath/ath10k/testmode.c b/drivers/net/wireless/ath/ath10k/testmode.c index 8bb36c18a749..d8564624415c 100644 --- a/drivers/net/wireless/ath/ath10k/testmode.c +++ b/drivers/net/wireless/ath/ath10k/testmode.c | |||
@@ -420,8 +420,8 @@ int ath10k_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | |||
420 | struct nlattr *tb[ATH10K_TM_ATTR_MAX + 1]; | 420 | struct nlattr *tb[ATH10K_TM_ATTR_MAX + 1]; |
421 | int ret; | 421 | int ret; |
422 | 422 | ||
423 | ret = nla_parse(tb, ATH10K_TM_ATTR_MAX, data, len, | 423 | ret = nla_parse(tb, ATH10K_TM_ATTR_MAX, data, len, ath10k_tm_policy, |
424 | ath10k_tm_policy); | 424 | NULL); |
425 | if (ret) | 425 | if (ret) |
426 | return ret; | 426 | return ret; |
427 | 427 | ||
diff --git a/drivers/net/wireless/ath/ath6kl/testmode.c b/drivers/net/wireless/ath/ath6kl/testmode.c index d67170ea1038..d8dcacda9add 100644 --- a/drivers/net/wireless/ath/ath6kl/testmode.c +++ b/drivers/net/wireless/ath/ath6kl/testmode.c | |||
@@ -74,8 +74,8 @@ int ath6kl_tm_cmd(struct wiphy *wiphy, struct wireless_dev *wdev, | |||
74 | int err, buf_len; | 74 | int err, buf_len; |
75 | void *buf; | 75 | void *buf; |
76 | 76 | ||
77 | err = nla_parse(tb, ATH6KL_TM_ATTR_MAX, data, len, | 77 | err = nla_parse(tb, ATH6KL_TM_ATTR_MAX, data, len, ath6kl_tm_policy, |
78 | ath6kl_tm_policy); | 78 | NULL); |
79 | if (err) | 79 | if (err) |
80 | return err; | 80 | return err; |
81 | 81 | ||
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c index 486dcceed17a..841bfdff8750 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | |||
@@ -3711,7 +3711,8 @@ static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm, | |||
3711 | int err; | 3711 | int err; |
3712 | u32 noa_duration; | 3712 | u32 noa_duration; |
3713 | 3713 | ||
3714 | err = nla_parse(tb, IWL_MVM_TM_ATTR_MAX, data, len, iwl_mvm_tm_policy); | 3714 | err = nla_parse(tb, IWL_MVM_TM_ATTR_MAX, data, len, iwl_mvm_tm_policy, |
3715 | NULL); | ||
3715 | if (err) | 3716 | if (err) |
3716 | return err; | 3717 | return err; |
3717 | 3718 | ||
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c index 50c219fb1a52..84a0e242ffdb 100644 --- a/drivers/net/wireless/mac80211_hwsim.c +++ b/drivers/net/wireless/mac80211_hwsim.c | |||
@@ -389,7 +389,7 @@ static int mac80211_hwsim_vendor_cmd_test(struct wiphy *wiphy, | |||
389 | u32 val; | 389 | u32 val; |
390 | 390 | ||
391 | err = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, | 391 | err = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len, |
392 | hwsim_vendor_test_policy); | 392 | hwsim_vendor_test_policy, NULL); |
393 | if (err) | 393 | if (err) |
394 | return err; | 394 | return err; |
395 | if (!tb[QCA_WLAN_VENDOR_ATTR_TEST]) | 395 | if (!tb[QCA_WLAN_VENDOR_ATTR_TEST]) |
@@ -1852,7 +1852,7 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw, | |||
1852 | int err, ps; | 1852 | int err, ps; |
1853 | 1853 | ||
1854 | err = nla_parse(tb, HWSIM_TM_ATTR_MAX, data, len, | 1854 | err = nla_parse(tb, HWSIM_TM_ATTR_MAX, data, len, |
1855 | hwsim_testmode_policy); | 1855 | hwsim_testmode_policy, NULL); |
1856 | if (err) | 1856 | if (err) |
1857 | return err; | 1857 | return err; |
1858 | 1858 | ||
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c index 44d06177859e..252e802df8fe 100644 --- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c +++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c | |||
@@ -4016,8 +4016,8 @@ static int mwifiex_tm_cmd(struct wiphy *wiphy, struct wireless_dev *wdev, | |||
4016 | if (!priv) | 4016 | if (!priv) |
4017 | return -EINVAL; | 4017 | return -EINVAL; |
4018 | 4018 | ||
4019 | err = nla_parse(tb, MWIFIEX_TM_ATTR_MAX, data, len, | 4019 | err = nla_parse(tb, MWIFIEX_TM_ATTR_MAX, data, len, mwifiex_tm_policy, |
4020 | mwifiex_tm_policy); | 4020 | NULL); |
4021 | if (err) | 4021 | if (err) |
4022 | return err; | 4022 | return err; |
4023 | 4023 | ||
diff --git a/drivers/net/wireless/ti/wlcore/testmode.c b/drivers/net/wireless/ti/wlcore/testmode.c index ddad58f614da..009ec07c4cec 100644 --- a/drivers/net/wireless/ti/wlcore/testmode.c +++ b/drivers/net/wireless/ti/wlcore/testmode.c | |||
@@ -366,7 +366,8 @@ int wl1271_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif, | |||
366 | u32 nla_cmd; | 366 | u32 nla_cmd; |
367 | int err; | 367 | int err; |
368 | 368 | ||
369 | err = nla_parse(tb, WL1271_TM_ATTR_MAX, data, len, wl1271_tm_policy); | 369 | err = nla_parse(tb, WL1271_TM_ATTR_MAX, data, len, wl1271_tm_policy, |
370 | NULL); | ||
370 | if (err) | 371 | if (err) |
371 | return err; | 372 | return err; |
372 | 373 | ||
diff --git a/drivers/net/wireless/ti/wlcore/vendor_cmd.c b/drivers/net/wireless/ti/wlcore/vendor_cmd.c index fd4e9ba176c9..5c0bcb1fe1a1 100644 --- a/drivers/net/wireless/ti/wlcore/vendor_cmd.c +++ b/drivers/net/wireless/ti/wlcore/vendor_cmd.c | |||
@@ -41,7 +41,7 @@ wlcore_vendor_cmd_smart_config_start(struct wiphy *wiphy, | |||
41 | return -EINVAL; | 41 | return -EINVAL; |
42 | 42 | ||
43 | ret = nla_parse(tb, MAX_WLCORE_VENDOR_ATTR, data, data_len, | 43 | ret = nla_parse(tb, MAX_WLCORE_VENDOR_ATTR, data, data_len, |
44 | wlcore_vendor_attr_policy); | 44 | wlcore_vendor_attr_policy, NULL); |
45 | if (ret) | 45 | if (ret) |
46 | return ret; | 46 | return ret; |
47 | 47 | ||
@@ -116,7 +116,7 @@ wlcore_vendor_cmd_smart_config_set_group_key(struct wiphy *wiphy, | |||
116 | return -EINVAL; | 116 | return -EINVAL; |
117 | 117 | ||
118 | ret = nla_parse(tb, MAX_WLCORE_VENDOR_ATTR, data, data_len, | 118 | ret = nla_parse(tb, MAX_WLCORE_VENDOR_ATTR, data, data_len, |
119 | wlcore_vendor_attr_policy); | 119 | wlcore_vendor_attr_policy, NULL); |
120 | if (ret) | 120 | if (ret) |
121 | return ret; | 121 | return ret; |
122 | 122 | ||
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index f18db6570f52..68b88192b00c 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h | |||
@@ -174,14 +174,16 @@ genlmsg_nlhdr(void *user_hdr, const struct genl_family *family) | |||
174 | * @tb: destination array with maxtype+1 elements | 174 | * @tb: destination array with maxtype+1 elements |
175 | * @maxtype: maximum attribute type to be expected | 175 | * @maxtype: maximum attribute type to be expected |
176 | * @policy: validation policy | 176 | * @policy: validation policy |
177 | * */ | 177 | * @extack: extended ACK report struct |
178 | */ | ||
178 | static inline int genlmsg_parse(const struct nlmsghdr *nlh, | 179 | static inline int genlmsg_parse(const struct nlmsghdr *nlh, |
179 | const struct genl_family *family, | 180 | const struct genl_family *family, |
180 | struct nlattr *tb[], int maxtype, | 181 | struct nlattr *tb[], int maxtype, |
181 | const struct nla_policy *policy) | 182 | const struct nla_policy *policy, |
183 | struct netlink_ext_ack *extack) | ||
182 | { | 184 | { |
183 | return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype, | 185 | return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype, |
184 | policy); | 186 | policy, extack); |
185 | } | 187 | } |
186 | 188 | ||
187 | /** | 189 | /** |
diff --git a/include/net/netlink.h b/include/net/netlink.h index a064ec3e2ee1..01709172b3d3 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
@@ -239,9 +239,11 @@ int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid, | |||
239 | unsigned int group, int report, gfp_t flags); | 239 | unsigned int group, int report, gfp_t flags); |
240 | 240 | ||
241 | int nla_validate(const struct nlattr *head, int len, int maxtype, | 241 | int nla_validate(const struct nlattr *head, int len, int maxtype, |
242 | const struct nla_policy *policy); | 242 | const struct nla_policy *policy, |
243 | struct netlink_ext_ack *extack); | ||
243 | int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, | 244 | int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, |
244 | int len, const struct nla_policy *policy); | 245 | int len, const struct nla_policy *policy, |
246 | struct netlink_ext_ack *extack); | ||
245 | int nla_policy_len(const struct nla_policy *, int); | 247 | int nla_policy_len(const struct nla_policy *, int); |
246 | struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype); | 248 | struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype); |
247 | size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize); | 249 | size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize); |
@@ -375,18 +377,20 @@ nlmsg_next(const struct nlmsghdr *nlh, int *remaining) | |||
375 | * @tb: destination array with maxtype+1 elements | 377 | * @tb: destination array with maxtype+1 elements |
376 | * @maxtype: maximum attribute type to be expected | 378 | * @maxtype: maximum attribute type to be expected |
377 | * @policy: validation policy | 379 | * @policy: validation policy |
380 | * @extack: extended ACK report struct | ||
378 | * | 381 | * |
379 | * See nla_parse() | 382 | * See nla_parse() |
380 | */ | 383 | */ |
381 | static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen, | 384 | static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen, |
382 | struct nlattr *tb[], int maxtype, | 385 | struct nlattr *tb[], int maxtype, |
383 | const struct nla_policy *policy) | 386 | const struct nla_policy *policy, |
387 | struct netlink_ext_ack *extack) | ||
384 | { | 388 | { |
385 | if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) | 389 | if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) |
386 | return -EINVAL; | 390 | return -EINVAL; |
387 | 391 | ||
388 | return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen), | 392 | return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen), |
389 | nlmsg_attrlen(nlh, hdrlen), policy); | 393 | nlmsg_attrlen(nlh, hdrlen), policy, extack); |
390 | } | 394 | } |
391 | 395 | ||
392 | /** | 396 | /** |
@@ -410,16 +414,19 @@ static inline struct nlattr *nlmsg_find_attr(const struct nlmsghdr *nlh, | |||
410 | * @hdrlen: length of familiy specific header | 414 | * @hdrlen: length of familiy specific header |
411 | * @maxtype: maximum attribute type to be expected | 415 | * @maxtype: maximum attribute type to be expected |
412 | * @policy: validation policy | 416 | * @policy: validation policy |
417 | * @extack: extended ACK report struct | ||
413 | */ | 418 | */ |
414 | static inline int nlmsg_validate(const struct nlmsghdr *nlh, | 419 | static inline int nlmsg_validate(const struct nlmsghdr *nlh, |
415 | int hdrlen, int maxtype, | 420 | int hdrlen, int maxtype, |
416 | const struct nla_policy *policy) | 421 | const struct nla_policy *policy, |
422 | struct netlink_ext_ack *extack) | ||
417 | { | 423 | { |
418 | if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) | 424 | if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen)) |
419 | return -EINVAL; | 425 | return -EINVAL; |
420 | 426 | ||
421 | return nla_validate(nlmsg_attrdata(nlh, hdrlen), | 427 | return nla_validate(nlmsg_attrdata(nlh, hdrlen), |
422 | nlmsg_attrlen(nlh, hdrlen), maxtype, policy); | 428 | nlmsg_attrlen(nlh, hdrlen), maxtype, policy, |
429 | extack); | ||
423 | } | 430 | } |
424 | 431 | ||
425 | /** | 432 | /** |
@@ -740,14 +747,17 @@ nla_find_nested(const struct nlattr *nla, int attrtype) | |||
740 | * @maxtype: maximum attribute type to be expected | 747 | * @maxtype: maximum attribute type to be expected |
741 | * @nla: attribute containing the nested attributes | 748 | * @nla: attribute containing the nested attributes |
742 | * @policy: validation policy | 749 | * @policy: validation policy |
750 | * @extack: extended ACK report struct | ||
743 | * | 751 | * |
744 | * See nla_parse() | 752 | * See nla_parse() |
745 | */ | 753 | */ |
746 | static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, | 754 | static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, |
747 | const struct nlattr *nla, | 755 | const struct nlattr *nla, |
748 | const struct nla_policy *policy) | 756 | const struct nla_policy *policy, |
757 | struct netlink_ext_ack *extack) | ||
749 | { | 758 | { |
750 | return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy); | 759 | return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy, |
760 | extack); | ||
751 | } | 761 | } |
752 | 762 | ||
753 | /** | 763 | /** |
@@ -1253,6 +1263,7 @@ static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start) | |||
1253 | * @start: container attribute | 1263 | * @start: container attribute |
1254 | * @maxtype: maximum attribute type to be expected | 1264 | * @maxtype: maximum attribute type to be expected |
1255 | * @policy: validation policy | 1265 | * @policy: validation policy |
1266 | * @extack: extended ACK report struct | ||
1256 | * | 1267 | * |
1257 | * Validates all attributes in the nested attribute stream against the | 1268 | * Validates all attributes in the nested attribute stream against the |
1258 | * specified policy. Attributes with a type exceeding maxtype will be | 1269 | * specified policy. Attributes with a type exceeding maxtype will be |
@@ -1261,9 +1272,11 @@ static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start) | |||
1261 | * Returns 0 on success or a negative error code. | 1272 | * Returns 0 on success or a negative error code. |
1262 | */ | 1273 | */ |
1263 | static inline int nla_validate_nested(const struct nlattr *start, int maxtype, | 1274 | static inline int nla_validate_nested(const struct nlattr *start, int maxtype, |
1264 | const struct nla_policy *policy) | 1275 | const struct nla_policy *policy, |
1276 | struct netlink_ext_ack *extack) | ||
1265 | { | 1277 | { |
1266 | return nla_validate(nla_data(start), nla_len(start), maxtype, policy); | 1278 | return nla_validate(nla_data(start), nla_len(start), maxtype, policy, |
1279 | extack); | ||
1267 | } | 1280 | } |
1268 | 1281 | ||
1269 | /** | 1282 | /** |
diff --git a/include/net/rtnetlink.h b/include/net/rtnetlink.h index 106de5f7bf06..c07b941fce89 100644 --- a/include/net/rtnetlink.h +++ b/include/net/rtnetlink.h | |||
@@ -158,7 +158,8 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname, | |||
158 | int rtnl_delete_link(struct net_device *dev); | 158 | int rtnl_delete_link(struct net_device *dev); |
159 | int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm); | 159 | int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm); |
160 | 160 | ||
161 | int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len); | 161 | int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len, |
162 | struct netlink_ext_ack *exterr); | ||
162 | 163 | ||
163 | #define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind) | 164 | #define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind) |
164 | 165 | ||
diff --git a/lib/nlattr.c b/lib/nlattr.c index b42b8577fc23..a7e0b16078df 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c | |||
@@ -112,6 +112,7 @@ static int validate_nla(const struct nlattr *nla, int maxtype, | |||
112 | * @len: length of attribute stream | 112 | * @len: length of attribute stream |
113 | * @maxtype: maximum attribute type to be expected | 113 | * @maxtype: maximum attribute type to be expected |
114 | * @policy: validation policy | 114 | * @policy: validation policy |
115 | * @extack: extended ACK report struct | ||
115 | * | 116 | * |
116 | * Validates all attributes in the specified attribute stream against the | 117 | * Validates all attributes in the specified attribute stream against the |
117 | * specified policy. Attributes with a type exceeding maxtype will be | 118 | * specified policy. Attributes with a type exceeding maxtype will be |
@@ -120,20 +121,23 @@ static int validate_nla(const struct nlattr *nla, int maxtype, | |||
120 | * Returns 0 on success or a negative error code. | 121 | * Returns 0 on success or a negative error code. |
121 | */ | 122 | */ |
122 | int nla_validate(const struct nlattr *head, int len, int maxtype, | 123 | int nla_validate(const struct nlattr *head, int len, int maxtype, |
123 | const struct nla_policy *policy) | 124 | const struct nla_policy *policy, |
125 | struct netlink_ext_ack *extack) | ||
124 | { | 126 | { |
125 | const struct nlattr *nla; | 127 | const struct nlattr *nla; |
126 | int rem, err; | 128 | int rem; |
127 | 129 | ||
128 | nla_for_each_attr(nla, head, len, rem) { | 130 | nla_for_each_attr(nla, head, len, rem) { |
129 | err = validate_nla(nla, maxtype, policy); | 131 | int err = validate_nla(nla, maxtype, policy); |
130 | if (err < 0) | 132 | |
131 | goto errout; | 133 | if (err < 0) { |
134 | if (extack) | ||
135 | extack->bad_attr = nla; | ||
136 | return err; | ||
137 | } | ||
132 | } | 138 | } |
133 | 139 | ||
134 | err = 0; | 140 | return 0; |
135 | errout: | ||
136 | return err; | ||
137 | } | 141 | } |
138 | EXPORT_SYMBOL(nla_validate); | 142 | EXPORT_SYMBOL(nla_validate); |
139 | 143 | ||
@@ -180,7 +184,8 @@ EXPORT_SYMBOL(nla_policy_len); | |||
180 | * Returns 0 on success or a negative error code. | 184 | * Returns 0 on success or a negative error code. |
181 | */ | 185 | */ |
182 | int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, | 186 | int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, |
183 | int len, const struct nla_policy *policy) | 187 | int len, const struct nla_policy *policy, |
188 | struct netlink_ext_ack *extack) | ||
184 | { | 189 | { |
185 | const struct nlattr *nla; | 190 | const struct nlattr *nla; |
186 | int rem, err; | 191 | int rem, err; |
@@ -193,8 +198,11 @@ int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, | |||
193 | if (type > 0 && type <= maxtype) { | 198 | if (type > 0 && type <= maxtype) { |
194 | if (policy) { | 199 | if (policy) { |
195 | err = validate_nla(nla, maxtype, policy); | 200 | err = validate_nla(nla, maxtype, policy); |
196 | if (err < 0) | 201 | if (err < 0) { |
202 | if (extack) | ||
203 | extack->bad_attr = nla; | ||
197 | goto errout; | 204 | goto errout; |
205 | } | ||
198 | } | 206 | } |
199 | 207 | ||
200 | tb[type] = (struct nlattr *)nla; | 208 | tb[type] = (struct nlattr *)nla; |
diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c index 1270207f3d7c..9c94aad153b3 100644 --- a/net/8021q/vlan_netlink.c +++ b/net/8021q/vlan_netlink.c | |||
@@ -35,7 +35,8 @@ static inline int vlan_validate_qos_map(struct nlattr *attr) | |||
35 | { | 35 | { |
36 | if (!attr) | 36 | if (!attr) |
37 | return 0; | 37 | return 0; |
38 | return nla_validate_nested(attr, IFLA_VLAN_QOS_MAX, vlan_map_policy); | 38 | return nla_validate_nested(attr, IFLA_VLAN_QOS_MAX, vlan_map_policy, |
39 | NULL); | ||
39 | } | 40 | } |
40 | 41 | ||
41 | static int vlan_validate(struct nlattr *tb[], struct nlattr *data[]) | 42 | static int vlan_validate(struct nlattr *tb[], struct nlattr *data[]) |
diff --git a/net/bridge/br_mdb.c b/net/bridge/br_mdb.c index 056e6ac49d8f..993626a7fc3b 100644 --- a/net/bridge/br_mdb.c +++ b/net/bridge/br_mdb.c | |||
@@ -464,7 +464,8 @@ static int br_mdb_parse(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
464 | struct net_device *dev; | 464 | struct net_device *dev; |
465 | int err; | 465 | int err; |
466 | 466 | ||
467 | err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX, NULL); | 467 | err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX, NULL, |
468 | NULL); | ||
468 | if (err < 0) | 469 | if (err < 0) |
469 | return err; | 470 | return err; |
470 | 471 | ||
diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c index a8f6acd23e30..e6dea5cd6bd6 100644 --- a/net/bridge/br_netlink.c +++ b/net/bridge/br_netlink.c | |||
@@ -748,8 +748,8 @@ int br_setlink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags) | |||
748 | 748 | ||
749 | if (p && protinfo) { | 749 | if (p && protinfo) { |
750 | if (protinfo->nla_type & NLA_F_NESTED) { | 750 | if (protinfo->nla_type & NLA_F_NESTED) { |
751 | err = nla_parse_nested(tb, IFLA_BRPORT_MAX, | 751 | err = nla_parse_nested(tb, IFLA_BRPORT_MAX, protinfo, |
752 | protinfo, br_port_policy); | 752 | br_port_policy, NULL); |
753 | if (err) | 753 | if (err) |
754 | return err; | 754 | return err; |
755 | 755 | ||
diff --git a/net/bridge/br_netlink_tunnel.c b/net/bridge/br_netlink_tunnel.c index c913491495ab..3712c7f0e00c 100644 --- a/net/bridge/br_netlink_tunnel.c +++ b/net/bridge/br_netlink_tunnel.c | |||
@@ -227,8 +227,8 @@ int br_parse_vlan_tunnel_info(struct nlattr *attr, | |||
227 | 227 | ||
228 | memset(tinfo, 0, sizeof(*tinfo)); | 228 | memset(tinfo, 0, sizeof(*tinfo)); |
229 | 229 | ||
230 | err = nla_parse_nested(tb, IFLA_BRIDGE_VLAN_TUNNEL_MAX, | 230 | err = nla_parse_nested(tb, IFLA_BRIDGE_VLAN_TUNNEL_MAX, attr, |
231 | attr, vlan_tunnel_policy); | 231 | vlan_tunnel_policy, NULL); |
232 | if (err < 0) | 232 | if (err < 0) |
233 | return err; | 233 | return err; |
234 | 234 | ||
diff --git a/net/can/gw.c b/net/can/gw.c index 3c117a33e15f..3b84fb7d98aa 100644 --- a/net/can/gw.c +++ b/net/can/gw.c | |||
@@ -641,7 +641,7 @@ static int cgw_parse_attr(struct nlmsghdr *nlh, struct cf_mod *mod, | |||
641 | memset(mod, 0, sizeof(*mod)); | 641 | memset(mod, 0, sizeof(*mod)); |
642 | 642 | ||
643 | err = nlmsg_parse(nlh, sizeof(struct rtcanmsg), tb, CGW_MAX, | 643 | err = nlmsg_parse(nlh, sizeof(struct rtcanmsg), tb, CGW_MAX, |
644 | cgw_policy); | 644 | cgw_policy, NULL); |
645 | if (err < 0) | 645 | if (err < 0) |
646 | return err; | 646 | return err; |
647 | 647 | ||
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index 816e3ccb0ec9..df03110ca3c8 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -386,7 +386,7 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
386 | goto errout; | 386 | goto errout; |
387 | } | 387 | } |
388 | 388 | ||
389 | err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy); | 389 | err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, NULL); |
390 | if (err < 0) | 390 | if (err < 0) |
391 | goto errout; | 391 | goto errout; |
392 | 392 | ||
@@ -580,7 +580,7 @@ int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
580 | goto errout; | 580 | goto errout; |
581 | } | 581 | } |
582 | 582 | ||
583 | err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy); | 583 | err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, NULL); |
584 | if (err < 0) | 584 | if (err < 0) |
585 | goto errout; | 585 | goto errout; |
586 | 586 | ||
diff --git a/net/core/lwt_bpf.c b/net/core/lwt_bpf.c index 0cfe7b0216c3..b3bc0a31af9f 100644 --- a/net/core/lwt_bpf.c +++ b/net/core/lwt_bpf.c | |||
@@ -209,7 +209,8 @@ static int bpf_parse_prog(struct nlattr *attr, struct bpf_lwt_prog *prog, | |||
209 | int ret; | 209 | int ret; |
210 | u32 fd; | 210 | u32 fd; |
211 | 211 | ||
212 | ret = nla_parse_nested(tb, LWT_BPF_PROG_MAX, attr, bpf_prog_policy); | 212 | ret = nla_parse_nested(tb, LWT_BPF_PROG_MAX, attr, bpf_prog_policy, |
213 | NULL); | ||
213 | if (ret < 0) | 214 | if (ret < 0) |
214 | return ret; | 215 | return ret; |
215 | 216 | ||
@@ -249,7 +250,7 @@ static int bpf_build_state(struct nlattr *nla, | |||
249 | if (family != AF_INET && family != AF_INET6) | 250 | if (family != AF_INET && family != AF_INET6) |
250 | return -EAFNOSUPPORT; | 251 | return -EAFNOSUPPORT; |
251 | 252 | ||
252 | ret = nla_parse_nested(tb, LWT_BPF_MAX, nla, bpf_nl_policy); | 253 | ret = nla_parse_nested(tb, LWT_BPF_MAX, nla, bpf_nl_policy, NULL); |
253 | if (ret < 0) | 254 | if (ret < 0) |
254 | return ret; | 255 | return ret; |
255 | 256 | ||
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 8ae87c591c8e..31f37b264710 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
@@ -1661,7 +1661,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
1661 | int err; | 1661 | int err; |
1662 | 1662 | ||
1663 | ASSERT_RTNL(); | 1663 | ASSERT_RTNL(); |
1664 | err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL); | 1664 | err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL); |
1665 | if (err < 0) | 1665 | if (err < 0) |
1666 | goto out; | 1666 | goto out; |
1667 | 1667 | ||
@@ -1946,7 +1946,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
1946 | int err, tidx; | 1946 | int err, tidx; |
1947 | 1947 | ||
1948 | err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX, | 1948 | err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX, |
1949 | nl_neightbl_policy); | 1949 | nl_neightbl_policy, NULL); |
1950 | if (err < 0) | 1950 | if (err < 0) |
1951 | goto errout; | 1951 | goto errout; |
1952 | 1952 | ||
@@ -1984,7 +1984,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
1984 | int i, ifindex = 0; | 1984 | int i, ifindex = 0; |
1985 | 1985 | ||
1986 | err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS], | 1986 | err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS], |
1987 | nl_ntbl_parm_policy); | 1987 | nl_ntbl_parm_policy, NULL); |
1988 | if (err < 0) | 1988 | if (err < 0) |
1989 | goto errout_tbl_lock; | 1989 | goto errout_tbl_lock; |
1990 | 1990 | ||
@@ -2275,7 +2275,7 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb, | |||
2275 | unsigned int flags = NLM_F_MULTI; | 2275 | unsigned int flags = NLM_F_MULTI; |
2276 | int err; | 2276 | int err; |
2277 | 2277 | ||
2278 | err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL); | 2278 | err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL, NULL); |
2279 | if (!err) { | 2279 | if (!err) { |
2280 | if (tb[NDA_IFINDEX]) | 2280 | if (tb[NDA_IFINDEX]) |
2281 | filter_idx = nla_get_u32(tb[NDA_IFINDEX]); | 2281 | filter_idx = nla_get_u32(tb[NDA_IFINDEX]); |
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 652468ff65b7..ec18cbc756d2 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c | |||
@@ -579,7 +579,7 @@ static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
579 | int nsid, err; | 579 | int nsid, err; |
580 | 580 | ||
581 | err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX, | 581 | err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX, |
582 | rtnl_net_policy); | 582 | rtnl_net_policy, NULL); |
583 | if (err < 0) | 583 | if (err < 0) |
584 | return err; | 584 | return err; |
585 | if (!tb[NETNSA_NSID]) | 585 | if (!tb[NETNSA_NSID]) |
@@ -653,7 +653,7 @@ static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
653 | int err, id; | 653 | int err, id; |
654 | 654 | ||
655 | err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX, | 655 | err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX, |
656 | rtnl_net_policy); | 656 | rtnl_net_policy, NULL); |
657 | if (err < 0) | 657 | if (err < 0) |
658 | return err; | 658 | return err; |
659 | if (tb[NETNSA_PID]) | 659 | if (tb[NETNSA_PID]) |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 3cc4a627a537..0ee5479528b5 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -1515,7 +1515,8 @@ static const struct rtnl_link_ops *linkinfo_to_kind_ops(const struct nlattr *nla | |||
1515 | const struct rtnl_link_ops *ops = NULL; | 1515 | const struct rtnl_link_ops *ops = NULL; |
1516 | struct nlattr *linfo[IFLA_INFO_MAX + 1]; | 1516 | struct nlattr *linfo[IFLA_INFO_MAX + 1]; |
1517 | 1517 | ||
1518 | if (nla_parse_nested(linfo, IFLA_INFO_MAX, nla, ifla_info_policy) < 0) | 1518 | if (nla_parse_nested(linfo, IFLA_INFO_MAX, nla, |
1519 | ifla_info_policy, NULL) < 0) | ||
1519 | return NULL; | 1520 | return NULL; |
1520 | 1521 | ||
1521 | if (linfo[IFLA_INFO_KIND]) { | 1522 | if (linfo[IFLA_INFO_KIND]) { |
@@ -1592,8 +1593,8 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
1592 | hdrlen = nlmsg_len(cb->nlh) < sizeof(struct ifinfomsg) ? | 1593 | hdrlen = nlmsg_len(cb->nlh) < sizeof(struct ifinfomsg) ? |
1593 | sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg); | 1594 | sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg); |
1594 | 1595 | ||
1595 | if (nlmsg_parse(cb->nlh, hdrlen, tb, IFLA_MAX, ifla_policy) >= 0) { | 1596 | if (nlmsg_parse(cb->nlh, hdrlen, tb, IFLA_MAX, |
1596 | 1597 | ifla_policy, NULL) >= 0) { | |
1597 | if (tb[IFLA_EXT_MASK]) | 1598 | if (tb[IFLA_EXT_MASK]) |
1598 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); | 1599 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); |
1599 | 1600 | ||
@@ -1640,9 +1641,10 @@ out: | |||
1640 | return skb->len; | 1641 | return skb->len; |
1641 | } | 1642 | } |
1642 | 1643 | ||
1643 | int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len) | 1644 | int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len, |
1645 | struct netlink_ext_ack *exterr) | ||
1644 | { | 1646 | { |
1645 | return nla_parse(tb, IFLA_MAX, head, len, ifla_policy); | 1647 | return nla_parse(tb, IFLA_MAX, head, len, ifla_policy, exterr); |
1646 | } | 1648 | } |
1647 | EXPORT_SYMBOL(rtnl_nla_parse_ifla); | 1649 | EXPORT_SYMBOL(rtnl_nla_parse_ifla); |
1648 | 1650 | ||
@@ -2078,7 +2080,7 @@ static int do_setlink(const struct sk_buff *skb, | |||
2078 | goto errout; | 2080 | goto errout; |
2079 | } | 2081 | } |
2080 | err = nla_parse_nested(vfinfo, IFLA_VF_MAX, attr, | 2082 | err = nla_parse_nested(vfinfo, IFLA_VF_MAX, attr, |
2081 | ifla_vf_policy); | 2083 | ifla_vf_policy, NULL); |
2082 | if (err < 0) | 2084 | if (err < 0) |
2083 | goto errout; | 2085 | goto errout; |
2084 | err = do_setvfinfo(dev, vfinfo); | 2086 | err = do_setvfinfo(dev, vfinfo); |
@@ -2106,7 +2108,7 @@ static int do_setlink(const struct sk_buff *skb, | |||
2106 | goto errout; | 2108 | goto errout; |
2107 | } | 2109 | } |
2108 | err = nla_parse_nested(port, IFLA_PORT_MAX, attr, | 2110 | err = nla_parse_nested(port, IFLA_PORT_MAX, attr, |
2109 | ifla_port_policy); | 2111 | ifla_port_policy, NULL); |
2110 | if (err < 0) | 2112 | if (err < 0) |
2111 | goto errout; | 2113 | goto errout; |
2112 | if (!port[IFLA_PORT_VF]) { | 2114 | if (!port[IFLA_PORT_VF]) { |
@@ -2126,7 +2128,8 @@ static int do_setlink(const struct sk_buff *skb, | |||
2126 | struct nlattr *port[IFLA_PORT_MAX+1]; | 2128 | struct nlattr *port[IFLA_PORT_MAX+1]; |
2127 | 2129 | ||
2128 | err = nla_parse_nested(port, IFLA_PORT_MAX, | 2130 | err = nla_parse_nested(port, IFLA_PORT_MAX, |
2129 | tb[IFLA_PORT_SELF], ifla_port_policy); | 2131 | tb[IFLA_PORT_SELF], ifla_port_policy, |
2132 | NULL); | ||
2130 | if (err < 0) | 2133 | if (err < 0) |
2131 | goto errout; | 2134 | goto errout; |
2132 | 2135 | ||
@@ -2170,7 +2173,7 @@ static int do_setlink(const struct sk_buff *skb, | |||
2170 | u32 xdp_flags = 0; | 2173 | u32 xdp_flags = 0; |
2171 | 2174 | ||
2172 | err = nla_parse_nested(xdp, IFLA_XDP_MAX, tb[IFLA_XDP], | 2175 | err = nla_parse_nested(xdp, IFLA_XDP_MAX, tb[IFLA_XDP], |
2173 | ifla_xdp_policy); | 2176 | ifla_xdp_policy, NULL); |
2174 | if (err < 0) | 2177 | if (err < 0) |
2175 | goto errout; | 2178 | goto errout; |
2176 | 2179 | ||
@@ -2219,7 +2222,7 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
2219 | struct nlattr *tb[IFLA_MAX+1]; | 2222 | struct nlattr *tb[IFLA_MAX+1]; |
2220 | char ifname[IFNAMSIZ]; | 2223 | char ifname[IFNAMSIZ]; |
2221 | 2224 | ||
2222 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy); | 2225 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); |
2223 | if (err < 0) | 2226 | if (err < 0) |
2224 | goto errout; | 2227 | goto errout; |
2225 | 2228 | ||
@@ -2312,7 +2315,7 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
2312 | struct nlattr *tb[IFLA_MAX+1]; | 2315 | struct nlattr *tb[IFLA_MAX+1]; |
2313 | int err; | 2316 | int err; |
2314 | 2317 | ||
2315 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy); | 2318 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); |
2316 | if (err < 0) | 2319 | if (err < 0) |
2317 | return err; | 2320 | return err; |
2318 | 2321 | ||
@@ -2441,7 +2444,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
2441 | #ifdef CONFIG_MODULES | 2444 | #ifdef CONFIG_MODULES |
2442 | replay: | 2445 | replay: |
2443 | #endif | 2446 | #endif |
2444 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy); | 2447 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); |
2445 | if (err < 0) | 2448 | if (err < 0) |
2446 | return err; | 2449 | return err; |
2447 | 2450 | ||
@@ -2472,7 +2475,8 @@ replay: | |||
2472 | 2475 | ||
2473 | if (tb[IFLA_LINKINFO]) { | 2476 | if (tb[IFLA_LINKINFO]) { |
2474 | err = nla_parse_nested(linkinfo, IFLA_INFO_MAX, | 2477 | err = nla_parse_nested(linkinfo, IFLA_INFO_MAX, |
2475 | tb[IFLA_LINKINFO], ifla_info_policy); | 2478 | tb[IFLA_LINKINFO], ifla_info_policy, |
2479 | NULL); | ||
2476 | if (err < 0) | 2480 | if (err < 0) |
2477 | return err; | 2481 | return err; |
2478 | } else | 2482 | } else |
@@ -2497,7 +2501,7 @@ replay: | |||
2497 | if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) { | 2501 | if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) { |
2498 | err = nla_parse_nested(attr, ops->maxtype, | 2502 | err = nla_parse_nested(attr, ops->maxtype, |
2499 | linkinfo[IFLA_INFO_DATA], | 2503 | linkinfo[IFLA_INFO_DATA], |
2500 | ops->policy); | 2504 | ops->policy, NULL); |
2501 | if (err < 0) | 2505 | if (err < 0) |
2502 | return err; | 2506 | return err; |
2503 | data = attr; | 2507 | data = attr; |
@@ -2515,7 +2519,8 @@ replay: | |||
2515 | err = nla_parse_nested(slave_attr, | 2519 | err = nla_parse_nested(slave_attr, |
2516 | m_ops->slave_maxtype, | 2520 | m_ops->slave_maxtype, |
2517 | linkinfo[IFLA_INFO_SLAVE_DATA], | 2521 | linkinfo[IFLA_INFO_SLAVE_DATA], |
2518 | m_ops->slave_policy); | 2522 | m_ops->slave_policy, |
2523 | NULL); | ||
2519 | if (err < 0) | 2524 | if (err < 0) |
2520 | return err; | 2525 | return err; |
2521 | slave_data = slave_attr; | 2526 | slave_data = slave_attr; |
@@ -2684,7 +2689,7 @@ static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh) | |||
2684 | int err; | 2689 | int err; |
2685 | u32 ext_filter_mask = 0; | 2690 | u32 ext_filter_mask = 0; |
2686 | 2691 | ||
2687 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy); | 2692 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL); |
2688 | if (err < 0) | 2693 | if (err < 0) |
2689 | return err; | 2694 | return err; |
2690 | 2695 | ||
@@ -2734,7 +2739,7 @@ static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
2734 | hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? | 2739 | hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ? |
2735 | sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg); | 2740 | sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg); |
2736 | 2741 | ||
2737 | if (nlmsg_parse(nlh, hdrlen, tb, IFLA_MAX, ifla_policy) >= 0) { | 2742 | if (nlmsg_parse(nlh, hdrlen, tb, IFLA_MAX, ifla_policy, NULL) >= 0) { |
2738 | if (tb[IFLA_EXT_MASK]) | 2743 | if (tb[IFLA_EXT_MASK]) |
2739 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); | 2744 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); |
2740 | } | 2745 | } |
@@ -2965,7 +2970,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
2965 | u16 vid; | 2970 | u16 vid; |
2966 | int err; | 2971 | int err; |
2967 | 2972 | ||
2968 | err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL); | 2973 | err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL); |
2969 | if (err < 0) | 2974 | if (err < 0) |
2970 | return err; | 2975 | return err; |
2971 | 2976 | ||
@@ -3068,7 +3073,7 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
3068 | if (!netlink_capable(skb, CAP_NET_ADMIN)) | 3073 | if (!netlink_capable(skb, CAP_NET_ADMIN)) |
3069 | return -EPERM; | 3074 | return -EPERM; |
3070 | 3075 | ||
3071 | err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL); | 3076 | err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL); |
3072 | if (err < 0) | 3077 | if (err < 0) |
3073 | return err; | 3078 | return err; |
3074 | 3079 | ||
@@ -3203,8 +3208,8 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
3203 | int err = 0; | 3208 | int err = 0; |
3204 | int fidx = 0; | 3209 | int fidx = 0; |
3205 | 3210 | ||
3206 | if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX, | 3211 | if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, |
3207 | ifla_policy) == 0) { | 3212 | IFLA_MAX, ifla_policy, NULL) == 0) { |
3208 | if (tb[IFLA_MASTER]) | 3213 | if (tb[IFLA_MASTER]) |
3209 | br_idx = nla_get_u32(tb[IFLA_MASTER]); | 3214 | br_idx = nla_get_u32(tb[IFLA_MASTER]); |
3210 | } | 3215 | } |
diff --git a/net/dcb/dcbnl.c b/net/dcb/dcbnl.c index 3202d75329b5..3f5a5f710576 100644 --- a/net/dcb/dcbnl.c +++ b/net/dcb/dcbnl.c | |||
@@ -245,8 +245,7 @@ static int dcbnl_getpfccfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
245 | return -EOPNOTSUPP; | 245 | return -EOPNOTSUPP; |
246 | 246 | ||
247 | ret = nla_parse_nested(data, DCB_PFC_UP_ATTR_MAX, | 247 | ret = nla_parse_nested(data, DCB_PFC_UP_ATTR_MAX, |
248 | tb[DCB_ATTR_PFC_CFG], | 248 | tb[DCB_ATTR_PFC_CFG], dcbnl_pfc_up_nest, NULL); |
249 | dcbnl_pfc_up_nest); | ||
250 | if (ret) | 249 | if (ret) |
251 | return ret; | 250 | return ret; |
252 | 251 | ||
@@ -304,7 +303,7 @@ static int dcbnl_getcap(struct net_device *netdev, struct nlmsghdr *nlh, | |||
304 | return -EOPNOTSUPP; | 303 | return -EOPNOTSUPP; |
305 | 304 | ||
306 | ret = nla_parse_nested(data, DCB_CAP_ATTR_MAX, tb[DCB_ATTR_CAP], | 305 | ret = nla_parse_nested(data, DCB_CAP_ATTR_MAX, tb[DCB_ATTR_CAP], |
307 | dcbnl_cap_nest); | 306 | dcbnl_cap_nest, NULL); |
308 | if (ret) | 307 | if (ret) |
309 | return ret; | 308 | return ret; |
310 | 309 | ||
@@ -348,7 +347,7 @@ static int dcbnl_getnumtcs(struct net_device *netdev, struct nlmsghdr *nlh, | |||
348 | return -EOPNOTSUPP; | 347 | return -EOPNOTSUPP; |
349 | 348 | ||
350 | ret = nla_parse_nested(data, DCB_NUMTCS_ATTR_MAX, tb[DCB_ATTR_NUMTCS], | 349 | ret = nla_parse_nested(data, DCB_NUMTCS_ATTR_MAX, tb[DCB_ATTR_NUMTCS], |
351 | dcbnl_numtcs_nest); | 350 | dcbnl_numtcs_nest, NULL); |
352 | if (ret) | 351 | if (ret) |
353 | return ret; | 352 | return ret; |
354 | 353 | ||
@@ -393,7 +392,7 @@ static int dcbnl_setnumtcs(struct net_device *netdev, struct nlmsghdr *nlh, | |||
393 | return -EOPNOTSUPP; | 392 | return -EOPNOTSUPP; |
394 | 393 | ||
395 | ret = nla_parse_nested(data, DCB_NUMTCS_ATTR_MAX, tb[DCB_ATTR_NUMTCS], | 394 | ret = nla_parse_nested(data, DCB_NUMTCS_ATTR_MAX, tb[DCB_ATTR_NUMTCS], |
396 | dcbnl_numtcs_nest); | 395 | dcbnl_numtcs_nest, NULL); |
397 | if (ret) | 396 | if (ret) |
398 | return ret; | 397 | return ret; |
399 | 398 | ||
@@ -452,7 +451,7 @@ static int dcbnl_getapp(struct net_device *netdev, struct nlmsghdr *nlh, | |||
452 | return -EINVAL; | 451 | return -EINVAL; |
453 | 452 | ||
454 | ret = nla_parse_nested(app_tb, DCB_APP_ATTR_MAX, tb[DCB_ATTR_APP], | 453 | ret = nla_parse_nested(app_tb, DCB_APP_ATTR_MAX, tb[DCB_ATTR_APP], |
455 | dcbnl_app_nest); | 454 | dcbnl_app_nest, NULL); |
456 | if (ret) | 455 | if (ret) |
457 | return ret; | 456 | return ret; |
458 | 457 | ||
@@ -520,7 +519,7 @@ static int dcbnl_setapp(struct net_device *netdev, struct nlmsghdr *nlh, | |||
520 | return -EINVAL; | 519 | return -EINVAL; |
521 | 520 | ||
522 | ret = nla_parse_nested(app_tb, DCB_APP_ATTR_MAX, tb[DCB_ATTR_APP], | 521 | ret = nla_parse_nested(app_tb, DCB_APP_ATTR_MAX, tb[DCB_ATTR_APP], |
523 | dcbnl_app_nest); | 522 | dcbnl_app_nest, NULL); |
524 | if (ret) | 523 | if (ret) |
525 | return ret; | 524 | return ret; |
526 | 525 | ||
@@ -577,8 +576,8 @@ static int __dcbnl_pg_getcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
577 | !netdev->dcbnl_ops->getpgbwgcfgrx) | 576 | !netdev->dcbnl_ops->getpgbwgcfgrx) |
578 | return -EOPNOTSUPP; | 577 | return -EOPNOTSUPP; |
579 | 578 | ||
580 | ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX, | 579 | ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX, tb[DCB_ATTR_PG_CFG], |
581 | tb[DCB_ATTR_PG_CFG], dcbnl_pg_nest); | 580 | dcbnl_pg_nest, NULL); |
582 | if (ret) | 581 | if (ret) |
583 | return ret; | 582 | return ret; |
584 | 583 | ||
@@ -597,8 +596,8 @@ static int __dcbnl_pg_getcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
597 | data = pg_tb[DCB_PG_ATTR_TC_ALL]; | 596 | data = pg_tb[DCB_PG_ATTR_TC_ALL]; |
598 | else | 597 | else |
599 | data = pg_tb[i]; | 598 | data = pg_tb[i]; |
600 | ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX, | 599 | ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX, data, |
601 | data, dcbnl_tc_param_nest); | 600 | dcbnl_tc_param_nest, NULL); |
602 | if (ret) | 601 | if (ret) |
603 | goto err_pg; | 602 | goto err_pg; |
604 | 603 | ||
@@ -735,8 +734,7 @@ static int dcbnl_setpfccfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
735 | return -EOPNOTSUPP; | 734 | return -EOPNOTSUPP; |
736 | 735 | ||
737 | ret = nla_parse_nested(data, DCB_PFC_UP_ATTR_MAX, | 736 | ret = nla_parse_nested(data, DCB_PFC_UP_ATTR_MAX, |
738 | tb[DCB_ATTR_PFC_CFG], | 737 | tb[DCB_ATTR_PFC_CFG], dcbnl_pfc_up_nest, NULL); |
739 | dcbnl_pfc_up_nest); | ||
740 | if (ret) | 738 | if (ret) |
741 | return ret; | 739 | return ret; |
742 | 740 | ||
@@ -791,8 +789,8 @@ static int __dcbnl_pg_setcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
791 | !netdev->dcbnl_ops->setpgbwgcfgrx) | 789 | !netdev->dcbnl_ops->setpgbwgcfgrx) |
792 | return -EOPNOTSUPP; | 790 | return -EOPNOTSUPP; |
793 | 791 | ||
794 | ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX, | 792 | ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX, tb[DCB_ATTR_PG_CFG], |
795 | tb[DCB_ATTR_PG_CFG], dcbnl_pg_nest); | 793 | dcbnl_pg_nest, NULL); |
796 | if (ret) | 794 | if (ret) |
797 | return ret; | 795 | return ret; |
798 | 796 | ||
@@ -801,7 +799,7 @@ static int __dcbnl_pg_setcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
801 | continue; | 799 | continue; |
802 | 800 | ||
803 | ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX, | 801 | ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX, |
804 | pg_tb[i], dcbnl_tc_param_nest); | 802 | pg_tb[i], dcbnl_tc_param_nest, NULL); |
805 | if (ret) | 803 | if (ret) |
806 | return ret; | 804 | return ret; |
807 | 805 | ||
@@ -889,8 +887,8 @@ static int dcbnl_bcn_getcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
889 | !netdev->dcbnl_ops->getbcncfg) | 887 | !netdev->dcbnl_ops->getbcncfg) |
890 | return -EOPNOTSUPP; | 888 | return -EOPNOTSUPP; |
891 | 889 | ||
892 | ret = nla_parse_nested(bcn_tb, DCB_BCN_ATTR_MAX, | 890 | ret = nla_parse_nested(bcn_tb, DCB_BCN_ATTR_MAX, tb[DCB_ATTR_BCN], |
893 | tb[DCB_ATTR_BCN], dcbnl_bcn_nest); | 891 | dcbnl_bcn_nest, NULL); |
894 | if (ret) | 892 | if (ret) |
895 | return ret; | 893 | return ret; |
896 | 894 | ||
@@ -948,9 +946,8 @@ static int dcbnl_bcn_setcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
948 | !netdev->dcbnl_ops->setbcnrp) | 946 | !netdev->dcbnl_ops->setbcnrp) |
949 | return -EOPNOTSUPP; | 947 | return -EOPNOTSUPP; |
950 | 948 | ||
951 | ret = nla_parse_nested(data, DCB_BCN_ATTR_MAX, | 949 | ret = nla_parse_nested(data, DCB_BCN_ATTR_MAX, tb[DCB_ATTR_BCN], |
952 | tb[DCB_ATTR_BCN], | 950 | dcbnl_pfc_up_nest, NULL); |
953 | dcbnl_pfc_up_nest); | ||
954 | if (ret) | 951 | if (ret) |
955 | return ret; | 952 | return ret; |
956 | 953 | ||
@@ -1424,8 +1421,8 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh, | |||
1424 | if (!tb[DCB_ATTR_IEEE]) | 1421 | if (!tb[DCB_ATTR_IEEE]) |
1425 | return -EINVAL; | 1422 | return -EINVAL; |
1426 | 1423 | ||
1427 | err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX, | 1424 | err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX, tb[DCB_ATTR_IEEE], |
1428 | tb[DCB_ATTR_IEEE], dcbnl_ieee_policy); | 1425 | dcbnl_ieee_policy, NULL); |
1429 | if (err) | 1426 | if (err) |
1430 | return err; | 1427 | return err; |
1431 | 1428 | ||
@@ -1508,8 +1505,8 @@ static int dcbnl_ieee_del(struct net_device *netdev, struct nlmsghdr *nlh, | |||
1508 | if (!tb[DCB_ATTR_IEEE]) | 1505 | if (!tb[DCB_ATTR_IEEE]) |
1509 | return -EINVAL; | 1506 | return -EINVAL; |
1510 | 1507 | ||
1511 | err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX, | 1508 | err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX, tb[DCB_ATTR_IEEE], |
1512 | tb[DCB_ATTR_IEEE], dcbnl_ieee_policy); | 1509 | dcbnl_ieee_policy, NULL); |
1513 | if (err) | 1510 | if (err) |
1514 | return err; | 1511 | return err; |
1515 | 1512 | ||
@@ -1581,8 +1578,8 @@ static int dcbnl_getfeatcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
1581 | if (!tb[DCB_ATTR_FEATCFG]) | 1578 | if (!tb[DCB_ATTR_FEATCFG]) |
1582 | return -EINVAL; | 1579 | return -EINVAL; |
1583 | 1580 | ||
1584 | ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX, tb[DCB_ATTR_FEATCFG], | 1581 | ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX, |
1585 | dcbnl_featcfg_nest); | 1582 | tb[DCB_ATTR_FEATCFG], dcbnl_featcfg_nest, NULL); |
1586 | if (ret) | 1583 | if (ret) |
1587 | return ret; | 1584 | return ret; |
1588 | 1585 | ||
@@ -1625,8 +1622,8 @@ static int dcbnl_setfeatcfg(struct net_device *netdev, struct nlmsghdr *nlh, | |||
1625 | if (!tb[DCB_ATTR_FEATCFG]) | 1622 | if (!tb[DCB_ATTR_FEATCFG]) |
1626 | return -EINVAL; | 1623 | return -EINVAL; |
1627 | 1624 | ||
1628 | ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX, tb[DCB_ATTR_FEATCFG], | 1625 | ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX, |
1629 | dcbnl_featcfg_nest); | 1626 | tb[DCB_ATTR_FEATCFG], dcbnl_featcfg_nest, NULL); |
1630 | 1627 | ||
1631 | if (ret) | 1628 | if (ret) |
1632 | goto err; | 1629 | goto err; |
@@ -1715,7 +1712,7 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
1715 | return -EPERM; | 1712 | return -EPERM; |
1716 | 1713 | ||
1717 | ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX, | 1714 | ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX, |
1718 | dcbnl_rtnl_policy); | 1715 | dcbnl_rtnl_policy, NULL); |
1719 | if (ret < 0) | 1716 | if (ret < 0) |
1720 | return ret; | 1717 | return ret; |
1721 | 1718 | ||
diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c index 8fdd9f492b0e..e65f1be44e8e 100644 --- a/net/decnet/dn_dev.c +++ b/net/decnet/dn_dev.c | |||
@@ -581,7 +581,7 @@ static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
581 | if (!net_eq(net, &init_net)) | 581 | if (!net_eq(net, &init_net)) |
582 | goto errout; | 582 | goto errout; |
583 | 583 | ||
584 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy); | 584 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy, NULL); |
585 | if (err < 0) | 585 | if (err < 0) |
586 | goto errout; | 586 | goto errout; |
587 | 587 | ||
@@ -625,7 +625,7 @@ static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
625 | if (!net_eq(net, &init_net)) | 625 | if (!net_eq(net, &init_net)) |
626 | return -EINVAL; | 626 | return -EINVAL; |
627 | 627 | ||
628 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy); | 628 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy, NULL); |
629 | if (err < 0) | 629 | if (err < 0) |
630 | return err; | 630 | return err; |
631 | 631 | ||
diff --git a/net/decnet/dn_fib.c b/net/decnet/dn_fib.c index 7af0ba6157a1..34663bf8aa6d 100644 --- a/net/decnet/dn_fib.c +++ b/net/decnet/dn_fib.c | |||
@@ -515,7 +515,8 @@ static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
515 | if (!net_eq(net, &init_net)) | 515 | if (!net_eq(net, &init_net)) |
516 | return -EINVAL; | 516 | return -EINVAL; |
517 | 517 | ||
518 | err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy); | 518 | err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy, |
519 | NULL); | ||
519 | if (err < 0) | 520 | if (err < 0) |
520 | return err; | 521 | return err; |
521 | 522 | ||
@@ -540,7 +541,8 @@ static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
540 | if (!net_eq(net, &init_net)) | 541 | if (!net_eq(net, &init_net)) |
541 | return -EINVAL; | 542 | return -EINVAL; |
542 | 543 | ||
543 | err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy); | 544 | err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy, |
545 | NULL); | ||
544 | if (err < 0) | 546 | if (err < 0) |
545 | return err; | 547 | return err; |
546 | 548 | ||
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index b1dc096d22f8..2d7097bbc666 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c | |||
@@ -1654,7 +1654,7 @@ static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) | |||
1654 | if (!net_eq(net, &init_net)) | 1654 | if (!net_eq(net, &init_net)) |
1655 | return -EINVAL; | 1655 | return -EINVAL; |
1656 | 1656 | ||
1657 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_dn_policy); | 1657 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_dn_policy, NULL); |
1658 | if (err < 0) | 1658 | if (err < 0) |
1659 | return err; | 1659 | return err; |
1660 | 1660 | ||
diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c index fc60cd061f39..d6b1a1b21909 100644 --- a/net/ieee802154/nl802154.c +++ b/net/ieee802154/nl802154.c | |||
@@ -249,8 +249,7 @@ nl802154_prepare_wpan_dev_dump(struct sk_buff *skb, | |||
249 | if (!cb->args[0]) { | 249 | if (!cb->args[0]) { |
250 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, | 250 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, |
251 | genl_family_attrbuf(&nl802154_fam), | 251 | genl_family_attrbuf(&nl802154_fam), |
252 | nl802154_fam.maxattr, | 252 | nl802154_fam.maxattr, nl802154_policy, NULL); |
253 | nl802154_policy); | ||
254 | if (err) | 253 | if (err) |
255 | goto out_unlock; | 254 | goto out_unlock; |
256 | 255 | ||
@@ -562,8 +561,8 @@ static int nl802154_dump_wpan_phy_parse(struct sk_buff *skb, | |||
562 | struct nl802154_dump_wpan_phy_state *state) | 561 | struct nl802154_dump_wpan_phy_state *state) |
563 | { | 562 | { |
564 | struct nlattr **tb = genl_family_attrbuf(&nl802154_fam); | 563 | struct nlattr **tb = genl_family_attrbuf(&nl802154_fam); |
565 | int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, | 564 | int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, tb, |
566 | tb, nl802154_fam.maxattr, nl802154_policy); | 565 | nl802154_fam.maxattr, nl802154_policy, NULL); |
567 | 566 | ||
568 | /* TODO check if we can handle error here, | 567 | /* TODO check if we can handle error here, |
569 | * we have no backward compatibility | 568 | * we have no backward compatibility |
@@ -1308,7 +1307,7 @@ ieee802154_llsec_parse_dev_addr(struct nlattr *nla, | |||
1308 | struct nlattr *attrs[NL802154_DEV_ADDR_ATTR_MAX + 1]; | 1307 | struct nlattr *attrs[NL802154_DEV_ADDR_ATTR_MAX + 1]; |
1309 | 1308 | ||
1310 | if (!nla || nla_parse_nested(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla, | 1309 | if (!nla || nla_parse_nested(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla, |
1311 | nl802154_dev_addr_policy)) | 1310 | nl802154_dev_addr_policy, NULL)) |
1312 | return -EINVAL; | 1311 | return -EINVAL; |
1313 | 1312 | ||
1314 | if (!attrs[NL802154_DEV_ADDR_ATTR_PAN_ID] || | 1313 | if (!attrs[NL802154_DEV_ADDR_ATTR_PAN_ID] || |
@@ -1348,7 +1347,7 @@ ieee802154_llsec_parse_key_id(struct nlattr *nla, | |||
1348 | struct nlattr *attrs[NL802154_KEY_ID_ATTR_MAX + 1]; | 1347 | struct nlattr *attrs[NL802154_KEY_ID_ATTR_MAX + 1]; |
1349 | 1348 | ||
1350 | if (!nla || nla_parse_nested(attrs, NL802154_KEY_ID_ATTR_MAX, nla, | 1349 | if (!nla || nla_parse_nested(attrs, NL802154_KEY_ID_ATTR_MAX, nla, |
1351 | nl802154_key_id_policy)) | 1350 | nl802154_key_id_policy, NULL)) |
1352 | return -EINVAL; | 1351 | return -EINVAL; |
1353 | 1352 | ||
1354 | if (!attrs[NL802154_KEY_ID_ATTR_MODE]) | 1353 | if (!attrs[NL802154_KEY_ID_ATTR_MODE]) |
@@ -1565,7 +1564,7 @@ static int nl802154_add_llsec_key(struct sk_buff *skb, struct genl_info *info) | |||
1565 | 1564 | ||
1566 | if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX, | 1565 | if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX, |
1567 | info->attrs[NL802154_ATTR_SEC_KEY], | 1566 | info->attrs[NL802154_ATTR_SEC_KEY], |
1568 | nl802154_key_policy)) | 1567 | nl802154_key_policy, NULL)) |
1569 | return -EINVAL; | 1568 | return -EINVAL; |
1570 | 1569 | ||
1571 | if (!attrs[NL802154_KEY_ATTR_USAGE_FRAMES] || | 1570 | if (!attrs[NL802154_KEY_ATTR_USAGE_FRAMES] || |
@@ -1615,7 +1614,7 @@ static int nl802154_del_llsec_key(struct sk_buff *skb, struct genl_info *info) | |||
1615 | 1614 | ||
1616 | if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX, | 1615 | if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX, |
1617 | info->attrs[NL802154_ATTR_SEC_KEY], | 1616 | info->attrs[NL802154_ATTR_SEC_KEY], |
1618 | nl802154_key_policy)) | 1617 | nl802154_key_policy, NULL)) |
1619 | return -EINVAL; | 1618 | return -EINVAL; |
1620 | 1619 | ||
1621 | if (ieee802154_llsec_parse_key_id(attrs[NL802154_KEY_ATTR_ID], &id) < 0) | 1620 | if (ieee802154_llsec_parse_key_id(attrs[NL802154_KEY_ATTR_ID], &id) < 0) |
@@ -1729,8 +1728,8 @@ ieee802154_llsec_parse_device(struct nlattr *nla, | |||
1729 | { | 1728 | { |
1730 | struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1]; | 1729 | struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1]; |
1731 | 1730 | ||
1732 | if (!nla || nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, nla, | 1731 | if (!nla || nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, |
1733 | nl802154_dev_policy)) | 1732 | nla, nl802154_dev_policy, NULL)) |
1734 | return -EINVAL; | 1733 | return -EINVAL; |
1735 | 1734 | ||
1736 | memset(dev, 0, sizeof(*dev)); | 1735 | memset(dev, 0, sizeof(*dev)); |
@@ -1783,7 +1782,7 @@ static int nl802154_del_llsec_dev(struct sk_buff *skb, struct genl_info *info) | |||
1783 | 1782 | ||
1784 | if (nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, | 1783 | if (nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, |
1785 | info->attrs[NL802154_ATTR_SEC_DEVICE], | 1784 | info->attrs[NL802154_ATTR_SEC_DEVICE], |
1786 | nl802154_dev_policy)) | 1785 | nl802154_dev_policy, NULL)) |
1787 | return -EINVAL; | 1786 | return -EINVAL; |
1788 | 1787 | ||
1789 | if (!attrs[NL802154_DEV_ATTR_EXTENDED_ADDR]) | 1788 | if (!attrs[NL802154_DEV_ATTR_EXTENDED_ADDR]) |
@@ -1911,7 +1910,7 @@ static int nl802154_add_llsec_devkey(struct sk_buff *skb, struct genl_info *info | |||
1911 | if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] || | 1910 | if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] || |
1912 | nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, | 1911 | nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, |
1913 | info->attrs[NL802154_ATTR_SEC_DEVKEY], | 1912 | info->attrs[NL802154_ATTR_SEC_DEVKEY], |
1914 | nl802154_devkey_policy) < 0) | 1913 | nl802154_devkey_policy, NULL) < 0) |
1915 | return -EINVAL; | 1914 | return -EINVAL; |
1916 | 1915 | ||
1917 | if (!attrs[NL802154_DEVKEY_ATTR_FRAME_COUNTER] || | 1916 | if (!attrs[NL802154_DEVKEY_ATTR_FRAME_COUNTER] || |
@@ -1943,7 +1942,7 @@ static int nl802154_del_llsec_devkey(struct sk_buff *skb, struct genl_info *info | |||
1943 | 1942 | ||
1944 | if (nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, | 1943 | if (nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX, |
1945 | info->attrs[NL802154_ATTR_SEC_DEVKEY], | 1944 | info->attrs[NL802154_ATTR_SEC_DEVKEY], |
1946 | nl802154_devkey_policy)) | 1945 | nl802154_devkey_policy, NULL)) |
1947 | return -EINVAL; | 1946 | return -EINVAL; |
1948 | 1947 | ||
1949 | if (!attrs[NL802154_DEVKEY_ATTR_EXTENDED_ADDR]) | 1948 | if (!attrs[NL802154_DEVKEY_ATTR_EXTENDED_ADDR]) |
@@ -2063,8 +2062,8 @@ llsec_parse_seclevel(struct nlattr *nla, struct ieee802154_llsec_seclevel *sl) | |||
2063 | { | 2062 | { |
2064 | struct nlattr *attrs[NL802154_SECLEVEL_ATTR_MAX + 1]; | 2063 | struct nlattr *attrs[NL802154_SECLEVEL_ATTR_MAX + 1]; |
2065 | 2064 | ||
2066 | if (!nla || nla_parse_nested(attrs, NL802154_SECLEVEL_ATTR_MAX, nla, | 2065 | if (!nla || nla_parse_nested(attrs, NL802154_SECLEVEL_ATTR_MAX, |
2067 | nl802154_seclevel_policy)) | 2066 | nla, nl802154_seclevel_policy, NULL)) |
2068 | return -EINVAL; | 2067 | return -EINVAL; |
2069 | 2068 | ||
2070 | memset(sl, 0, sizeof(*sl)); | 2069 | memset(sl, 0, sizeof(*sl)); |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 6d3602ec640c..f33f53791f50 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -582,7 +582,8 @@ static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
582 | 582 | ||
583 | ASSERT_RTNL(); | 583 | ASSERT_RTNL(); |
584 | 584 | ||
585 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy); | 585 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy, |
586 | NULL); | ||
586 | if (err < 0) | 587 | if (err < 0) |
587 | goto errout; | 588 | goto errout; |
588 | 589 | ||
@@ -752,7 +753,8 @@ static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh, | |||
752 | struct in_device *in_dev; | 753 | struct in_device *in_dev; |
753 | int err; | 754 | int err; |
754 | 755 | ||
755 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy); | 756 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy, |
757 | NULL); | ||
756 | if (err < 0) | 758 | if (err < 0) |
757 | goto errout; | 759 | goto errout; |
758 | 760 | ||
@@ -1717,7 +1719,7 @@ static int inet_validate_link_af(const struct net_device *dev, | |||
1717 | if (dev && !__in_dev_get_rtnl(dev)) | 1719 | if (dev && !__in_dev_get_rtnl(dev)) |
1718 | return -EAFNOSUPPORT; | 1720 | return -EAFNOSUPPORT; |
1719 | 1721 | ||
1720 | err = nla_parse_nested(tb, IFLA_INET_MAX, nla, inet_af_policy); | 1722 | err = nla_parse_nested(tb, IFLA_INET_MAX, nla, inet_af_policy, NULL); |
1721 | if (err < 0) | 1723 | if (err < 0) |
1722 | return err; | 1724 | return err; |
1723 | 1725 | ||
@@ -1745,7 +1747,7 @@ static int inet_set_link_af(struct net_device *dev, const struct nlattr *nla) | |||
1745 | if (!in_dev) | 1747 | if (!in_dev) |
1746 | return -EAFNOSUPPORT; | 1748 | return -EAFNOSUPPORT; |
1747 | 1749 | ||
1748 | if (nla_parse_nested(tb, IFLA_INET_MAX, nla, NULL) < 0) | 1750 | if (nla_parse_nested(tb, IFLA_INET_MAX, nla, NULL, NULL) < 0) |
1749 | BUG(); | 1751 | BUG(); |
1750 | 1752 | ||
1751 | if (tb[IFLA_INET_CONF]) { | 1753 | if (tb[IFLA_INET_CONF]) { |
@@ -1882,7 +1884,7 @@ static int inet_netconf_get_devconf(struct sk_buff *in_skb, | |||
1882 | int err; | 1884 | int err; |
1883 | 1885 | ||
1884 | err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, | 1886 | err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, |
1885 | devconf_ipv4_policy); | 1887 | devconf_ipv4_policy, NULL); |
1886 | if (err < 0) | 1888 | if (err < 0) |
1887 | goto errout; | 1889 | goto errout; |
1888 | 1890 | ||
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 8f2133ffc2ff..434dd2538716 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c | |||
@@ -632,7 +632,8 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb, | |||
632 | int err, remaining; | 632 | int err, remaining; |
633 | struct rtmsg *rtm; | 633 | struct rtmsg *rtm; |
634 | 634 | ||
635 | err = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipv4_policy); | 635 | err = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipv4_policy, |
636 | NULL); | ||
636 | if (err < 0) | 637 | if (err < 0) |
637 | goto errout; | 638 | goto errout; |
638 | 639 | ||
diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c index a31f47ccaad9..baf196eaf1d8 100644 --- a/net/ipv4/ip_tunnel_core.c +++ b/net/ipv4/ip_tunnel_core.c | |||
@@ -235,7 +235,7 @@ static int ip_tun_build_state(struct nlattr *attr, | |||
235 | struct nlattr *tb[LWTUNNEL_IP_MAX + 1]; | 235 | struct nlattr *tb[LWTUNNEL_IP_MAX + 1]; |
236 | int err; | 236 | int err; |
237 | 237 | ||
238 | err = nla_parse_nested(tb, LWTUNNEL_IP_MAX, attr, ip_tun_policy); | 238 | err = nla_parse_nested(tb, LWTUNNEL_IP_MAX, attr, ip_tun_policy, NULL); |
239 | if (err < 0) | 239 | if (err < 0) |
240 | return err; | 240 | return err; |
241 | 241 | ||
@@ -332,7 +332,8 @@ static int ip6_tun_build_state(struct nlattr *attr, | |||
332 | struct nlattr *tb[LWTUNNEL_IP6_MAX + 1]; | 332 | struct nlattr *tb[LWTUNNEL_IP6_MAX + 1]; |
333 | int err; | 333 | int err; |
334 | 334 | ||
335 | err = nla_parse_nested(tb, LWTUNNEL_IP6_MAX, attr, ip6_tun_policy); | 335 | err = nla_parse_nested(tb, LWTUNNEL_IP6_MAX, attr, ip6_tun_policy, |
336 | NULL); | ||
336 | if (err < 0) | 337 | if (err < 0) |
337 | return err; | 338 | return err; |
338 | 339 | ||
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 5bca64fc71b7..d7be21f2174a 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -2439,7 +2439,8 @@ static int rtm_to_ipmr_mfcc(struct net *net, struct nlmsghdr *nlh, | |||
2439 | struct rtmsg *rtm; | 2439 | struct rtmsg *rtm; |
2440 | int ret, rem; | 2440 | int ret, rem; |
2441 | 2441 | ||
2442 | ret = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipmr_policy); | 2442 | ret = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipmr_policy, |
2443 | NULL); | ||
2443 | if (ret < 0) | 2444 | if (ret < 0) |
2444 | goto out; | 2445 | goto out; |
2445 | rtm = nlmsg_data(nlh); | 2446 | rtm = nlmsg_data(nlh); |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 0fcc2d5192bd..7a4f2c38c3c4 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -2645,7 +2645,8 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) | |||
2645 | u32 table_id = RT_TABLE_MAIN; | 2645 | u32 table_id = RT_TABLE_MAIN; |
2646 | kuid_t uid; | 2646 | kuid_t uid; |
2647 | 2647 | ||
2648 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy); | 2648 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy, |
2649 | NULL); | ||
2649 | if (err < 0) | 2650 | if (err < 0) |
2650 | goto errout; | 2651 | goto errout; |
2651 | 2652 | ||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 67ec87ea5fb6..b330c2abcb24 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
@@ -624,7 +624,7 @@ static int inet6_netconf_get_devconf(struct sk_buff *in_skb, | |||
624 | int err; | 624 | int err; |
625 | 625 | ||
626 | err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, | 626 | err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, |
627 | devconf_ipv6_policy); | 627 | devconf_ipv6_policy, NULL); |
628 | if (err < 0) | 628 | if (err < 0) |
629 | goto errout; | 629 | goto errout; |
630 | 630 | ||
@@ -4408,7 +4408,8 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
4408 | u32 ifa_flags; | 4408 | u32 ifa_flags; |
4409 | int err; | 4409 | int err; |
4410 | 4410 | ||
4411 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy); | 4411 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, |
4412 | NULL); | ||
4412 | if (err < 0) | 4413 | if (err < 0) |
4413 | return err; | 4414 | return err; |
4414 | 4415 | ||
@@ -4520,7 +4521,8 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
4520 | u32 ifa_flags; | 4521 | u32 ifa_flags; |
4521 | int err; | 4522 | int err; |
4522 | 4523 | ||
4523 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy); | 4524 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, |
4525 | NULL); | ||
4524 | if (err < 0) | 4526 | if (err < 0) |
4525 | return err; | 4527 | return err; |
4526 | 4528 | ||
@@ -4881,7 +4883,8 @@ static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh) | |||
4881 | struct sk_buff *skb; | 4883 | struct sk_buff *skb; |
4882 | int err; | 4884 | int err; |
4883 | 4885 | ||
4884 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy); | 4886 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, |
4887 | NULL); | ||
4885 | if (err < 0) | 4888 | if (err < 0) |
4886 | goto errout; | 4889 | goto errout; |
4887 | 4890 | ||
@@ -5251,7 +5254,8 @@ static int inet6_validate_link_af(const struct net_device *dev, | |||
5251 | if (dev && !__in6_dev_get(dev)) | 5254 | if (dev && !__in6_dev_get(dev)) |
5252 | return -EAFNOSUPPORT; | 5255 | return -EAFNOSUPPORT; |
5253 | 5256 | ||
5254 | return nla_parse_nested(tb, IFLA_INET6_MAX, nla, inet6_af_policy); | 5257 | return nla_parse_nested(tb, IFLA_INET6_MAX, nla, inet6_af_policy, |
5258 | NULL); | ||
5255 | } | 5259 | } |
5256 | 5260 | ||
5257 | static int check_addr_gen_mode(int mode) | 5261 | static int check_addr_gen_mode(int mode) |
@@ -5283,7 +5287,7 @@ static int inet6_set_link_af(struct net_device *dev, const struct nlattr *nla) | |||
5283 | if (!idev) | 5287 | if (!idev) |
5284 | return -EAFNOSUPPORT; | 5288 | return -EAFNOSUPPORT; |
5285 | 5289 | ||
5286 | if (nla_parse_nested(tb, IFLA_INET6_MAX, nla, NULL) < 0) | 5290 | if (nla_parse_nested(tb, IFLA_INET6_MAX, nla, NULL, NULL) < 0) |
5287 | BUG(); | 5291 | BUG(); |
5288 | 5292 | ||
5289 | if (tb[IFLA_INET6_TOKEN]) { | 5293 | if (tb[IFLA_INET6_TOKEN]) { |
diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c index a8f6986dcbe5..6cb4ed91722a 100644 --- a/net/ipv6/addrlabel.c +++ b/net/ipv6/addrlabel.c | |||
@@ -413,7 +413,7 @@ static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
413 | u32 label; | 413 | u32 label; |
414 | int err = 0; | 414 | int err = 0; |
415 | 415 | ||
416 | err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy); | 416 | err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy, NULL); |
417 | if (err < 0) | 417 | if (err < 0) |
418 | return err; | 418 | return err; |
419 | 419 | ||
@@ -532,7 +532,7 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh) | |||
532 | struct ip6addrlbl_entry *p; | 532 | struct ip6addrlbl_entry *p; |
533 | struct sk_buff *skb; | 533 | struct sk_buff *skb; |
534 | 534 | ||
535 | err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy); | 535 | err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy, NULL); |
536 | if (err < 0) | 536 | if (err < 0) |
537 | return err; | 537 | return err; |
538 | 538 | ||
diff --git a/net/ipv6/ila/ila_lwt.c b/net/ipv6/ila/ila_lwt.c index ce1aae4a7fc8..b3df03e3faa0 100644 --- a/net/ipv6/ila/ila_lwt.c +++ b/net/ipv6/ila/ila_lwt.c | |||
@@ -146,8 +146,7 @@ static int ila_build_state(struct nlattr *nla, | |||
146 | return -EINVAL; | 146 | return -EINVAL; |
147 | } | 147 | } |
148 | 148 | ||
149 | ret = nla_parse_nested(tb, ILA_ATTR_MAX, nla, | 149 | ret = nla_parse_nested(tb, ILA_ATTR_MAX, nla, ila_nl_policy, NULL); |
150 | ila_nl_policy); | ||
151 | if (ret < 0) | 150 | if (ret < 0) |
152 | return ret; | 151 | return ret; |
153 | 152 | ||
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 9db1418993f2..ccde23eba702 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -2906,7 +2906,8 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
2906 | unsigned int pref; | 2906 | unsigned int pref; |
2907 | int err; | 2907 | int err; |
2908 | 2908 | ||
2909 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy); | 2909 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy, |
2910 | NULL); | ||
2910 | if (err < 0) | 2911 | if (err < 0) |
2911 | goto errout; | 2912 | goto errout; |
2912 | 2913 | ||
@@ -3574,7 +3575,8 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh) | |||
3574 | struct flowi6 fl6; | 3575 | struct flowi6 fl6; |
3575 | int err, iif = 0, oif = 0; | 3576 | int err, iif = 0, oif = 0; |
3576 | 3577 | ||
3577 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy); | 3578 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy, |
3579 | NULL); | ||
3578 | if (err < 0) | 3580 | if (err < 0) |
3579 | goto errout; | 3581 | goto errout; |
3580 | 3582 | ||
diff --git a/net/ipv6/seg6_iptunnel.c b/net/ipv6/seg6_iptunnel.c index a644aaecdfd3..7436a4a62f3e 100644 --- a/net/ipv6/seg6_iptunnel.c +++ b/net/ipv6/seg6_iptunnel.c | |||
@@ -328,7 +328,7 @@ static int seg6_build_state(struct nlattr *nla, | |||
328 | int err; | 328 | int err; |
329 | 329 | ||
330 | err = nla_parse_nested(tb, SEG6_IPTUNNEL_MAX, nla, | 330 | err = nla_parse_nested(tb, SEG6_IPTUNNEL_MAX, nla, |
331 | seg6_iptunnel_policy); | 331 | seg6_iptunnel_policy, NULL); |
332 | 332 | ||
333 | if (err < 0) | 333 | if (err < 0) |
334 | return err; | 334 | return err; |
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c index 5928d22ba9c8..07181d2273e1 100644 --- a/net/mpls/af_mpls.c +++ b/net/mpls/af_mpls.c | |||
@@ -1122,7 +1122,7 @@ static int mpls_netconf_get_devconf(struct sk_buff *in_skb, | |||
1122 | int err; | 1122 | int err; |
1123 | 1123 | ||
1124 | err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, | 1124 | err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX, |
1125 | devconf_mpls_policy); | 1125 | devconf_mpls_policy, NULL); |
1126 | if (err < 0) | 1126 | if (err < 0) |
1127 | goto errout; | 1127 | goto errout; |
1128 | 1128 | ||
@@ -1643,7 +1643,8 @@ static int rtm_to_route_config(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
1643 | int index; | 1643 | int index; |
1644 | int err; | 1644 | int err; |
1645 | 1645 | ||
1646 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_mpls_policy); | 1646 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_mpls_policy, |
1647 | NULL); | ||
1647 | if (err < 0) | 1648 | if (err < 0) |
1648 | goto errout; | 1649 | goto errout; |
1649 | 1650 | ||
diff --git a/net/mpls/mpls_iptunnel.c b/net/mpls/mpls_iptunnel.c index fe00e98667cf..369c7a23c86c 100644 --- a/net/mpls/mpls_iptunnel.c +++ b/net/mpls/mpls_iptunnel.c | |||
@@ -168,7 +168,7 @@ static int mpls_build_state(struct nlattr *nla, | |||
168 | int ret; | 168 | int ret; |
169 | 169 | ||
170 | ret = nla_parse_nested(tb, MPLS_IPTUNNEL_MAX, nla, | 170 | ret = nla_parse_nested(tb, MPLS_IPTUNNEL_MAX, nla, |
171 | mpls_iptunnel_policy); | 171 | mpls_iptunnel_policy, NULL); |
172 | if (ret < 0) | 172 | if (ret < 0) |
173 | return ret; | 173 | return ret; |
174 | 174 | ||
diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c index 26356bf8cebf..9bd5b6636181 100644 --- a/net/netfilter/ipset/ip_set_core.c +++ b/net/netfilter/ipset/ip_set_core.c | |||
@@ -295,7 +295,8 @@ ip_set_get_ipaddr4(struct nlattr *nla, __be32 *ipaddr) | |||
295 | 295 | ||
296 | if (unlikely(!flag_nested(nla))) | 296 | if (unlikely(!flag_nested(nla))) |
297 | return -IPSET_ERR_PROTOCOL; | 297 | return -IPSET_ERR_PROTOCOL; |
298 | if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla, ipaddr_policy)) | 298 | if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla, |
299 | ipaddr_policy, NULL)) | ||
299 | return -IPSET_ERR_PROTOCOL; | 300 | return -IPSET_ERR_PROTOCOL; |
300 | if (unlikely(!ip_set_attr_netorder(tb, IPSET_ATTR_IPADDR_IPV4))) | 301 | if (unlikely(!ip_set_attr_netorder(tb, IPSET_ATTR_IPADDR_IPV4))) |
301 | return -IPSET_ERR_PROTOCOL; | 302 | return -IPSET_ERR_PROTOCOL; |
@@ -313,7 +314,8 @@ ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr) | |||
313 | if (unlikely(!flag_nested(nla))) | 314 | if (unlikely(!flag_nested(nla))) |
314 | return -IPSET_ERR_PROTOCOL; | 315 | return -IPSET_ERR_PROTOCOL; |
315 | 316 | ||
316 | if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla, ipaddr_policy)) | 317 | if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla, |
318 | ipaddr_policy, NULL)) | ||
317 | return -IPSET_ERR_PROTOCOL; | 319 | return -IPSET_ERR_PROTOCOL; |
318 | if (unlikely(!ip_set_attr_netorder(tb, IPSET_ATTR_IPADDR_IPV6))) | 320 | if (unlikely(!ip_set_attr_netorder(tb, IPSET_ATTR_IPADDR_IPV6))) |
319 | return -IPSET_ERR_PROTOCOL; | 321 | return -IPSET_ERR_PROTOCOL; |
@@ -906,7 +908,7 @@ static int ip_set_create(struct net *net, struct sock *ctnl, | |||
906 | /* Without holding any locks, create private part. */ | 908 | /* Without holding any locks, create private part. */ |
907 | if (attr[IPSET_ATTR_DATA] && | 909 | if (attr[IPSET_ATTR_DATA] && |
908 | nla_parse_nested(tb, IPSET_ATTR_CREATE_MAX, attr[IPSET_ATTR_DATA], | 910 | nla_parse_nested(tb, IPSET_ATTR_CREATE_MAX, attr[IPSET_ATTR_DATA], |
909 | set->type->create_policy)) { | 911 | set->type->create_policy, NULL)) { |
910 | ret = -IPSET_ERR_PROTOCOL; | 912 | ret = -IPSET_ERR_PROTOCOL; |
911 | goto put_out; | 913 | goto put_out; |
912 | } | 914 | } |
@@ -1257,8 +1259,8 @@ dump_init(struct netlink_callback *cb, struct ip_set_net *inst) | |||
1257 | ip_set_id_t index; | 1259 | ip_set_id_t index; |
1258 | 1260 | ||
1259 | /* Second pass, so parser can't fail */ | 1261 | /* Second pass, so parser can't fail */ |
1260 | nla_parse(cda, IPSET_ATTR_CMD_MAX, | 1262 | nla_parse(cda, IPSET_ATTR_CMD_MAX, attr, nlh->nlmsg_len - min_len, |
1261 | attr, nlh->nlmsg_len - min_len, ip_set_setname_policy); | 1263 | ip_set_setname_policy, NULL); |
1262 | 1264 | ||
1263 | if (cda[IPSET_ATTR_SETNAME]) { | 1265 | if (cda[IPSET_ATTR_SETNAME]) { |
1264 | struct ip_set *set; | 1266 | struct ip_set *set; |
@@ -1501,9 +1503,8 @@ call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set, | |||
1501 | memcpy(&errmsg->msg, nlh, nlh->nlmsg_len); | 1503 | memcpy(&errmsg->msg, nlh, nlh->nlmsg_len); |
1502 | cmdattr = (void *)&errmsg->msg + min_len; | 1504 | cmdattr = (void *)&errmsg->msg + min_len; |
1503 | 1505 | ||
1504 | nla_parse(cda, IPSET_ATTR_CMD_MAX, | 1506 | nla_parse(cda, IPSET_ATTR_CMD_MAX, cmdattr, |
1505 | cmdattr, nlh->nlmsg_len - min_len, | 1507 | nlh->nlmsg_len - min_len, ip_set_adt_policy, NULL); |
1506 | ip_set_adt_policy); | ||
1507 | 1508 | ||
1508 | errline = nla_data(cda[IPSET_ATTR_LINENO]); | 1509 | errline = nla_data(cda[IPSET_ATTR_LINENO]); |
1509 | 1510 | ||
@@ -1549,7 +1550,7 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb, | |||
1549 | if (attr[IPSET_ATTR_DATA]) { | 1550 | if (attr[IPSET_ATTR_DATA]) { |
1550 | if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, | 1551 | if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, |
1551 | attr[IPSET_ATTR_DATA], | 1552 | attr[IPSET_ATTR_DATA], |
1552 | set->type->adt_policy)) | 1553 | set->type->adt_policy, NULL)) |
1553 | return -IPSET_ERR_PROTOCOL; | 1554 | return -IPSET_ERR_PROTOCOL; |
1554 | ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, flags, | 1555 | ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, flags, |
1555 | use_lineno); | 1556 | use_lineno); |
@@ -1561,7 +1562,7 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb, | |||
1561 | if (nla_type(nla) != IPSET_ATTR_DATA || | 1562 | if (nla_type(nla) != IPSET_ATTR_DATA || |
1562 | !flag_nested(nla) || | 1563 | !flag_nested(nla) || |
1563 | nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla, | 1564 | nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla, |
1564 | set->type->adt_policy)) | 1565 | set->type->adt_policy, NULL)) |
1565 | return -IPSET_ERR_PROTOCOL; | 1566 | return -IPSET_ERR_PROTOCOL; |
1566 | ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, | 1567 | ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, |
1567 | flags, use_lineno); | 1568 | flags, use_lineno); |
@@ -1603,7 +1604,7 @@ static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb, | |||
1603 | if (attr[IPSET_ATTR_DATA]) { | 1604 | if (attr[IPSET_ATTR_DATA]) { |
1604 | if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, | 1605 | if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, |
1605 | attr[IPSET_ATTR_DATA], | 1606 | attr[IPSET_ATTR_DATA], |
1606 | set->type->adt_policy)) | 1607 | set->type->adt_policy, NULL)) |
1607 | return -IPSET_ERR_PROTOCOL; | 1608 | return -IPSET_ERR_PROTOCOL; |
1608 | ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, flags, | 1609 | ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, flags, |
1609 | use_lineno); | 1610 | use_lineno); |
@@ -1615,7 +1616,7 @@ static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb, | |||
1615 | if (nla_type(nla) != IPSET_ATTR_DATA || | 1616 | if (nla_type(nla) != IPSET_ATTR_DATA || |
1616 | !flag_nested(nla) || | 1617 | !flag_nested(nla) || |
1617 | nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla, | 1618 | nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla, |
1618 | set->type->adt_policy)) | 1619 | set->type->adt_policy, NULL)) |
1619 | return -IPSET_ERR_PROTOCOL; | 1620 | return -IPSET_ERR_PROTOCOL; |
1620 | ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, | 1621 | ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, |
1621 | flags, use_lineno); | 1622 | flags, use_lineno); |
@@ -1646,7 +1647,7 @@ static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb, | |||
1646 | return -ENOENT; | 1647 | return -ENOENT; |
1647 | 1648 | ||
1648 | if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, attr[IPSET_ATTR_DATA], | 1649 | if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, attr[IPSET_ATTR_DATA], |
1649 | set->type->adt_policy)) | 1650 | set->type->adt_policy, NULL)) |
1650 | return -IPSET_ERR_PROTOCOL; | 1651 | return -IPSET_ERR_PROTOCOL; |
1651 | 1652 | ||
1652 | rcu_read_lock_bh(); | 1653 | rcu_read_lock_bh(); |
diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c index 541aa7694775..adb7ee142c5f 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c | |||
@@ -3089,7 +3089,8 @@ static int ip_vs_genl_parse_service(struct netns_ipvs *ipvs, | |||
3089 | 3089 | ||
3090 | /* Parse mandatory identifying service fields first */ | 3090 | /* Parse mandatory identifying service fields first */ |
3091 | if (nla == NULL || | 3091 | if (nla == NULL || |
3092 | nla_parse_nested(attrs, IPVS_SVC_ATTR_MAX, nla, ip_vs_svc_policy)) | 3092 | nla_parse_nested(attrs, IPVS_SVC_ATTR_MAX, nla, |
3093 | ip_vs_svc_policy, NULL)) | ||
3093 | return -EINVAL; | 3094 | return -EINVAL; |
3094 | 3095 | ||
3095 | nla_af = attrs[IPVS_SVC_ATTR_AF]; | 3096 | nla_af = attrs[IPVS_SVC_ATTR_AF]; |
@@ -3251,8 +3252,8 @@ static int ip_vs_genl_dump_dests(struct sk_buff *skb, | |||
3251 | mutex_lock(&__ip_vs_mutex); | 3252 | mutex_lock(&__ip_vs_mutex); |
3252 | 3253 | ||
3253 | /* Try to find the service for which to dump destinations */ | 3254 | /* Try to find the service for which to dump destinations */ |
3254 | if (nlmsg_parse(cb->nlh, GENL_HDRLEN, attrs, | 3255 | if (nlmsg_parse(cb->nlh, GENL_HDRLEN, attrs, IPVS_CMD_ATTR_MAX, |
3255 | IPVS_CMD_ATTR_MAX, ip_vs_cmd_policy)) | 3256 | ip_vs_cmd_policy, NULL)) |
3256 | goto out_err; | 3257 | goto out_err; |
3257 | 3258 | ||
3258 | 3259 | ||
@@ -3288,7 +3289,8 @@ static int ip_vs_genl_parse_dest(struct ip_vs_dest_user_kern *udest, | |||
3288 | 3289 | ||
3289 | /* Parse mandatory identifying destination fields first */ | 3290 | /* Parse mandatory identifying destination fields first */ |
3290 | if (nla == NULL || | 3291 | if (nla == NULL || |
3291 | nla_parse_nested(attrs, IPVS_DEST_ATTR_MAX, nla, ip_vs_dest_policy)) | 3292 | nla_parse_nested(attrs, IPVS_DEST_ATTR_MAX, nla, |
3293 | ip_vs_dest_policy, NULL)) | ||
3292 | return -EINVAL; | 3294 | return -EINVAL; |
3293 | 3295 | ||
3294 | nla_addr = attrs[IPVS_DEST_ATTR_ADDR]; | 3296 | nla_addr = attrs[IPVS_DEST_ATTR_ADDR]; |
@@ -3530,7 +3532,7 @@ static int ip_vs_genl_set_daemon(struct sk_buff *skb, struct genl_info *info) | |||
3530 | if (!info->attrs[IPVS_CMD_ATTR_DAEMON] || | 3532 | if (!info->attrs[IPVS_CMD_ATTR_DAEMON] || |
3531 | nla_parse_nested(daemon_attrs, IPVS_DAEMON_ATTR_MAX, | 3533 | nla_parse_nested(daemon_attrs, IPVS_DAEMON_ATTR_MAX, |
3532 | info->attrs[IPVS_CMD_ATTR_DAEMON], | 3534 | info->attrs[IPVS_CMD_ATTR_DAEMON], |
3533 | ip_vs_daemon_policy)) | 3535 | ip_vs_daemon_policy, NULL)) |
3534 | goto out; | 3536 | goto out; |
3535 | 3537 | ||
3536 | if (cmd == IPVS_CMD_NEW_DAEMON) | 3538 | if (cmd == IPVS_CMD_NEW_DAEMON) |
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index ecdc324c7785..ace824ab2e03 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -908,7 +908,7 @@ static int ctnetlink_parse_tuple_ip(struct nlattr *attr, | |||
908 | struct nf_conntrack_l3proto *l3proto; | 908 | struct nf_conntrack_l3proto *l3proto; |
909 | int ret = 0; | 909 | int ret = 0; |
910 | 910 | ||
911 | ret = nla_parse_nested(tb, CTA_IP_MAX, attr, NULL); | 911 | ret = nla_parse_nested(tb, CTA_IP_MAX, attr, NULL, NULL); |
912 | if (ret < 0) | 912 | if (ret < 0) |
913 | return ret; | 913 | return ret; |
914 | 914 | ||
@@ -917,7 +917,7 @@ static int ctnetlink_parse_tuple_ip(struct nlattr *attr, | |||
917 | 917 | ||
918 | if (likely(l3proto->nlattr_to_tuple)) { | 918 | if (likely(l3proto->nlattr_to_tuple)) { |
919 | ret = nla_validate_nested(attr, CTA_IP_MAX, | 919 | ret = nla_validate_nested(attr, CTA_IP_MAX, |
920 | l3proto->nla_policy); | 920 | l3proto->nla_policy, NULL); |
921 | if (ret == 0) | 921 | if (ret == 0) |
922 | ret = l3proto->nlattr_to_tuple(tb, tuple); | 922 | ret = l3proto->nlattr_to_tuple(tb, tuple); |
923 | } | 923 | } |
@@ -938,7 +938,8 @@ static int ctnetlink_parse_tuple_proto(struct nlattr *attr, | |||
938 | struct nf_conntrack_l4proto *l4proto; | 938 | struct nf_conntrack_l4proto *l4proto; |
939 | int ret = 0; | 939 | int ret = 0; |
940 | 940 | ||
941 | ret = nla_parse_nested(tb, CTA_PROTO_MAX, attr, proto_nla_policy); | 941 | ret = nla_parse_nested(tb, CTA_PROTO_MAX, attr, proto_nla_policy, |
942 | NULL); | ||
942 | if (ret < 0) | 943 | if (ret < 0) |
943 | return ret; | 944 | return ret; |
944 | 945 | ||
@@ -951,7 +952,7 @@ static int ctnetlink_parse_tuple_proto(struct nlattr *attr, | |||
951 | 952 | ||
952 | if (likely(l4proto->nlattr_to_tuple)) { | 953 | if (likely(l4proto->nlattr_to_tuple)) { |
953 | ret = nla_validate_nested(attr, CTA_PROTO_MAX, | 954 | ret = nla_validate_nested(attr, CTA_PROTO_MAX, |
954 | l4proto->nla_policy); | 955 | l4proto->nla_policy, NULL); |
955 | if (ret == 0) | 956 | if (ret == 0) |
956 | ret = l4proto->nlattr_to_tuple(tb, tuple); | 957 | ret = l4proto->nlattr_to_tuple(tb, tuple); |
957 | } | 958 | } |
@@ -1015,7 +1016,8 @@ ctnetlink_parse_tuple(const struct nlattr * const cda[], | |||
1015 | 1016 | ||
1016 | memset(tuple, 0, sizeof(*tuple)); | 1017 | memset(tuple, 0, sizeof(*tuple)); |
1017 | 1018 | ||
1018 | err = nla_parse_nested(tb, CTA_TUPLE_MAX, cda[type], tuple_nla_policy); | 1019 | err = nla_parse_nested(tb, CTA_TUPLE_MAX, cda[type], tuple_nla_policy, |
1020 | NULL); | ||
1019 | if (err < 0) | 1021 | if (err < 0) |
1020 | return err; | 1022 | return err; |
1021 | 1023 | ||
@@ -1065,7 +1067,7 @@ static int ctnetlink_parse_help(const struct nlattr *attr, char **helper_name, | |||
1065 | int err; | 1067 | int err; |
1066 | struct nlattr *tb[CTA_HELP_MAX+1]; | 1068 | struct nlattr *tb[CTA_HELP_MAX+1]; |
1067 | 1069 | ||
1068 | err = nla_parse_nested(tb, CTA_HELP_MAX, attr, help_nla_policy); | 1070 | err = nla_parse_nested(tb, CTA_HELP_MAX, attr, help_nla_policy, NULL); |
1069 | if (err < 0) | 1071 | if (err < 0) |
1070 | return err; | 1072 | return err; |
1071 | 1073 | ||
@@ -1566,7 +1568,8 @@ static int ctnetlink_change_protoinfo(struct nf_conn *ct, | |||
1566 | struct nf_conntrack_l4proto *l4proto; | 1568 | struct nf_conntrack_l4proto *l4proto; |
1567 | int err = 0; | 1569 | int err = 0; |
1568 | 1570 | ||
1569 | err = nla_parse_nested(tb, CTA_PROTOINFO_MAX, attr, protoinfo_policy); | 1571 | err = nla_parse_nested(tb, CTA_PROTOINFO_MAX, attr, protoinfo_policy, |
1572 | NULL); | ||
1570 | if (err < 0) | 1573 | if (err < 0) |
1571 | return err; | 1574 | return err; |
1572 | 1575 | ||
@@ -1591,7 +1594,7 @@ static int change_seq_adj(struct nf_ct_seqadj *seq, | |||
1591 | int err; | 1594 | int err; |
1592 | struct nlattr *cda[CTA_SEQADJ_MAX+1]; | 1595 | struct nlattr *cda[CTA_SEQADJ_MAX+1]; |
1593 | 1596 | ||
1594 | err = nla_parse_nested(cda, CTA_SEQADJ_MAX, attr, seqadj_policy); | 1597 | err = nla_parse_nested(cda, CTA_SEQADJ_MAX, attr, seqadj_policy, NULL); |
1595 | if (err < 0) | 1598 | if (err < 0) |
1596 | return err; | 1599 | return err; |
1597 | 1600 | ||
@@ -2348,7 +2351,7 @@ ctnetlink_glue_parse(const struct nlattr *attr, struct nf_conn *ct) | |||
2348 | struct nlattr *cda[CTA_MAX+1]; | 2351 | struct nlattr *cda[CTA_MAX+1]; |
2349 | int ret; | 2352 | int ret; |
2350 | 2353 | ||
2351 | ret = nla_parse_nested(cda, CTA_MAX, attr, ct_nla_policy); | 2354 | ret = nla_parse_nested(cda, CTA_MAX, attr, ct_nla_policy, NULL); |
2352 | if (ret < 0) | 2355 | if (ret < 0) |
2353 | return ret; | 2356 | return ret; |
2354 | 2357 | ||
@@ -2385,7 +2388,8 @@ ctnetlink_glue_attach_expect(const struct nlattr *attr, struct nf_conn *ct, | |||
2385 | struct nf_conntrack_expect *exp; | 2388 | struct nf_conntrack_expect *exp; |
2386 | int err; | 2389 | int err; |
2387 | 2390 | ||
2388 | err = nla_parse_nested(cda, CTA_EXPECT_MAX, attr, exp_nla_policy); | 2391 | err = nla_parse_nested(cda, CTA_EXPECT_MAX, attr, exp_nla_policy, |
2392 | NULL); | ||
2389 | if (err < 0) | 2393 | if (err < 0) |
2390 | return err; | 2394 | return err; |
2391 | 2395 | ||
@@ -3004,7 +3008,8 @@ ctnetlink_parse_expect_nat(const struct nlattr *attr, | |||
3004 | struct nf_conntrack_tuple nat_tuple = {}; | 3008 | struct nf_conntrack_tuple nat_tuple = {}; |
3005 | int err; | 3009 | int err; |
3006 | 3010 | ||
3007 | err = nla_parse_nested(tb, CTA_EXPECT_NAT_MAX, attr, exp_nat_nla_policy); | 3011 | err = nla_parse_nested(tb, CTA_EXPECT_NAT_MAX, attr, |
3012 | exp_nat_nla_policy, NULL); | ||
3008 | if (err < 0) | 3013 | if (err < 0) |
3009 | return err; | 3014 | return err; |
3010 | 3015 | ||
diff --git a/net/netfilter/nf_conntrack_proto_dccp.c b/net/netfilter/nf_conntrack_proto_dccp.c index 93dd1c5b7bff..b2e02dfe7fa8 100644 --- a/net/netfilter/nf_conntrack_proto_dccp.c +++ b/net/netfilter/nf_conntrack_proto_dccp.c | |||
@@ -665,7 +665,7 @@ static int nlattr_to_dccp(struct nlattr *cda[], struct nf_conn *ct) | |||
665 | return 0; | 665 | return 0; |
666 | 666 | ||
667 | err = nla_parse_nested(tb, CTA_PROTOINFO_DCCP_MAX, attr, | 667 | err = nla_parse_nested(tb, CTA_PROTOINFO_DCCP_MAX, attr, |
668 | dccp_nla_policy); | 668 | dccp_nla_policy, NULL); |
669 | if (err < 0) | 669 | if (err < 0) |
670 | return err; | 670 | return err; |
671 | 671 | ||
diff --git a/net/netfilter/nf_conntrack_proto_sctp.c b/net/netfilter/nf_conntrack_proto_sctp.c index 33279aab583d..2a7300587c87 100644 --- a/net/netfilter/nf_conntrack_proto_sctp.c +++ b/net/netfilter/nf_conntrack_proto_sctp.c | |||
@@ -584,10 +584,8 @@ static int nlattr_to_sctp(struct nlattr *cda[], struct nf_conn *ct) | |||
584 | if (!attr) | 584 | if (!attr) |
585 | return 0; | 585 | return 0; |
586 | 586 | ||
587 | err = nla_parse_nested(tb, | 587 | err = nla_parse_nested(tb, CTA_PROTOINFO_SCTP_MAX, attr, |
588 | CTA_PROTOINFO_SCTP_MAX, | 588 | sctp_nla_policy, NULL); |
589 | attr, | ||
590 | sctp_nla_policy); | ||
591 | if (err < 0) | 589 | if (err < 0) |
592 | return err; | 590 | return err; |
593 | 591 | ||
diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c index b122e9dacfed..85bde77ad967 100644 --- a/net/netfilter/nf_conntrack_proto_tcp.c +++ b/net/netfilter/nf_conntrack_proto_tcp.c | |||
@@ -1234,7 +1234,8 @@ static int nlattr_to_tcp(struct nlattr *cda[], struct nf_conn *ct) | |||
1234 | if (!pattr) | 1234 | if (!pattr) |
1235 | return 0; | 1235 | return 0; |
1236 | 1236 | ||
1237 | err = nla_parse_nested(tb, CTA_PROTOINFO_TCP_MAX, pattr, tcp_nla_policy); | 1237 | err = nla_parse_nested(tb, CTA_PROTOINFO_TCP_MAX, pattr, |
1238 | tcp_nla_policy, NULL); | ||
1238 | if (err < 0) | 1239 | if (err < 0) |
1239 | return err; | 1240 | return err; |
1240 | 1241 | ||
diff --git a/net/netfilter/nf_nat_core.c b/net/netfilter/nf_nat_core.c index 82802e4a6640..908ba5abbc0b 100644 --- a/net/netfilter/nf_nat_core.c +++ b/net/netfilter/nf_nat_core.c | |||
@@ -751,7 +751,8 @@ static int nfnetlink_parse_nat_proto(struct nlattr *attr, | |||
751 | const struct nf_nat_l4proto *l4proto; | 751 | const struct nf_nat_l4proto *l4proto; |
752 | int err; | 752 | int err; |
753 | 753 | ||
754 | err = nla_parse_nested(tb, CTA_PROTONAT_MAX, attr, protonat_nla_policy); | 754 | err = nla_parse_nested(tb, CTA_PROTONAT_MAX, attr, |
755 | protonat_nla_policy, NULL); | ||
755 | if (err < 0) | 756 | if (err < 0) |
756 | return err; | 757 | return err; |
757 | 758 | ||
@@ -780,7 +781,7 @@ nfnetlink_parse_nat(const struct nlattr *nat, | |||
780 | 781 | ||
781 | memset(range, 0, sizeof(*range)); | 782 | memset(range, 0, sizeof(*range)); |
782 | 783 | ||
783 | err = nla_parse_nested(tb, CTA_NAT_MAX, nat, nat_nla_policy); | 784 | err = nla_parse_nested(tb, CTA_NAT_MAX, nat, nat_nla_policy, NULL); |
784 | if (err < 0) | 785 | if (err < 0) |
785 | return err; | 786 | return err; |
786 | 787 | ||
diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index 2d822d2fd830..907431318637 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c | |||
@@ -1182,7 +1182,8 @@ static struct nft_stats __percpu *nft_stats_alloc(const struct nlattr *attr) | |||
1182 | struct nft_stats *stats; | 1182 | struct nft_stats *stats; |
1183 | int err; | 1183 | int err; |
1184 | 1184 | ||
1185 | err = nla_parse_nested(tb, NFTA_COUNTER_MAX, attr, nft_counter_policy); | 1185 | err = nla_parse_nested(tb, NFTA_COUNTER_MAX, attr, nft_counter_policy, |
1186 | NULL); | ||
1186 | if (err < 0) | 1187 | if (err < 0) |
1187 | return ERR_PTR(err); | 1188 | return ERR_PTR(err); |
1188 | 1189 | ||
@@ -1257,7 +1258,7 @@ static int nft_chain_parse_hook(struct net *net, | |||
1257 | int err; | 1258 | int err; |
1258 | 1259 | ||
1259 | err = nla_parse_nested(ha, NFTA_HOOK_MAX, nla[NFTA_CHAIN_HOOK], | 1260 | err = nla_parse_nested(ha, NFTA_HOOK_MAX, nla[NFTA_CHAIN_HOOK], |
1260 | nft_hook_policy); | 1261 | nft_hook_policy, NULL); |
1261 | if (err < 0) | 1262 | if (err < 0) |
1262 | return err; | 1263 | return err; |
1263 | 1264 | ||
@@ -1724,7 +1725,7 @@ static int nf_tables_expr_parse(const struct nft_ctx *ctx, | |||
1724 | struct nlattr *tb[NFTA_EXPR_MAX + 1]; | 1725 | struct nlattr *tb[NFTA_EXPR_MAX + 1]; |
1725 | int err; | 1726 | int err; |
1726 | 1727 | ||
1727 | err = nla_parse_nested(tb, NFTA_EXPR_MAX, nla, nft_expr_policy); | 1728 | err = nla_parse_nested(tb, NFTA_EXPR_MAX, nla, nft_expr_policy, NULL); |
1728 | if (err < 0) | 1729 | if (err < 0) |
1729 | return err; | 1730 | return err; |
1730 | 1731 | ||
@@ -1734,7 +1735,7 @@ static int nf_tables_expr_parse(const struct nft_ctx *ctx, | |||
1734 | 1735 | ||
1735 | if (tb[NFTA_EXPR_DATA]) { | 1736 | if (tb[NFTA_EXPR_DATA]) { |
1736 | err = nla_parse_nested(info->tb, type->maxattr, | 1737 | err = nla_parse_nested(info->tb, type->maxattr, |
1737 | tb[NFTA_EXPR_DATA], type->policy); | 1738 | tb[NFTA_EXPR_DATA], type->policy, NULL); |
1738 | if (err < 0) | 1739 | if (err < 0) |
1739 | goto err1; | 1740 | goto err1; |
1740 | } else | 1741 | } else |
@@ -2879,7 +2880,8 @@ static int nf_tables_set_desc_parse(const struct nft_ctx *ctx, | |||
2879 | struct nlattr *da[NFTA_SET_DESC_MAX + 1]; | 2880 | struct nlattr *da[NFTA_SET_DESC_MAX + 1]; |
2880 | int err; | 2881 | int err; |
2881 | 2882 | ||
2882 | err = nla_parse_nested(da, NFTA_SET_DESC_MAX, nla, nft_set_desc_policy); | 2883 | err = nla_parse_nested(da, NFTA_SET_DESC_MAX, nla, |
2884 | nft_set_desc_policy, NULL); | ||
2883 | if (err < 0) | 2885 | if (err < 0) |
2884 | return err; | 2886 | return err; |
2885 | 2887 | ||
@@ -3381,7 +3383,8 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb) | |||
3381 | int event, err; | 3383 | int event, err; |
3382 | 3384 | ||
3383 | err = nlmsg_parse(cb->nlh, sizeof(struct nfgenmsg), nla, | 3385 | err = nlmsg_parse(cb->nlh, sizeof(struct nfgenmsg), nla, |
3384 | NFTA_SET_ELEM_LIST_MAX, nft_set_elem_list_policy); | 3386 | NFTA_SET_ELEM_LIST_MAX, nft_set_elem_list_policy, |
3387 | NULL); | ||
3385 | if (err < 0) | 3388 | if (err < 0) |
3386 | return err; | 3389 | return err; |
3387 | 3390 | ||
@@ -3640,7 +3643,7 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set, | |||
3640 | int err; | 3643 | int err; |
3641 | 3644 | ||
3642 | err = nla_parse_nested(nla, NFTA_SET_ELEM_MAX, attr, | 3645 | err = nla_parse_nested(nla, NFTA_SET_ELEM_MAX, attr, |
3643 | nft_set_elem_policy); | 3646 | nft_set_elem_policy, NULL); |
3644 | if (err < 0) | 3647 | if (err < 0) |
3645 | return err; | 3648 | return err; |
3646 | 3649 | ||
@@ -3870,7 +3873,7 @@ static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set, | |||
3870 | int err; | 3873 | int err; |
3871 | 3874 | ||
3872 | err = nla_parse_nested(nla, NFTA_SET_ELEM_MAX, attr, | 3875 | err = nla_parse_nested(nla, NFTA_SET_ELEM_MAX, attr, |
3873 | nft_set_elem_policy); | 3876 | nft_set_elem_policy, NULL); |
3874 | if (err < 0) | 3877 | if (err < 0) |
3875 | goto err1; | 3878 | goto err1; |
3876 | 3879 | ||
@@ -4101,7 +4104,8 @@ static struct nft_object *nft_obj_init(const struct nft_ctx *ctx, | |||
4101 | int err; | 4104 | int err; |
4102 | 4105 | ||
4103 | if (attr) { | 4106 | if (attr) { |
4104 | err = nla_parse_nested(tb, type->maxattr, attr, type->policy); | 4107 | err = nla_parse_nested(tb, type->maxattr, attr, type->policy, |
4108 | NULL); | ||
4105 | if (err < 0) | 4109 | if (err < 0) |
4106 | goto err1; | 4110 | goto err1; |
4107 | } else { | 4111 | } else { |
@@ -5314,7 +5318,8 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data, | |||
5314 | struct nft_chain *chain; | 5318 | struct nft_chain *chain; |
5315 | int err; | 5319 | int err; |
5316 | 5320 | ||
5317 | err = nla_parse_nested(tb, NFTA_VERDICT_MAX, nla, nft_verdict_policy); | 5321 | err = nla_parse_nested(tb, NFTA_VERDICT_MAX, nla, nft_verdict_policy, |
5322 | NULL); | ||
5318 | if (err < 0) | 5323 | if (err < 0) |
5319 | return err; | 5324 | return err; |
5320 | 5325 | ||
@@ -5444,7 +5449,7 @@ int nft_data_init(const struct nft_ctx *ctx, | |||
5444 | struct nlattr *tb[NFTA_DATA_MAX + 1]; | 5449 | struct nlattr *tb[NFTA_DATA_MAX + 1]; |
5445 | int err; | 5450 | int err; |
5446 | 5451 | ||
5447 | err = nla_parse_nested(tb, NFTA_DATA_MAX, nla, nft_data_policy); | 5452 | err = nla_parse_nested(tb, NFTA_DATA_MAX, nla, nft_data_policy, NULL); |
5448 | if (err < 0) | 5453 | if (err < 0) |
5449 | return err; | 5454 | return err; |
5450 | 5455 | ||
diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c index 181d3bb800e6..792def00a07d 100644 --- a/net/netfilter/nfnetlink.c +++ b/net/netfilter/nfnetlink.c | |||
@@ -192,8 +192,8 @@ replay: | |||
192 | int attrlen = nlh->nlmsg_len - min_len; | 192 | int attrlen = nlh->nlmsg_len - min_len; |
193 | __u8 subsys_id = NFNL_SUBSYS_ID(type); | 193 | __u8 subsys_id = NFNL_SUBSYS_ID(type); |
194 | 194 | ||
195 | err = nla_parse(cda, ss->cb[cb_id].attr_count, | 195 | err = nla_parse(cda, ss->cb[cb_id].attr_count, attr, attrlen, |
196 | attr, attrlen, ss->cb[cb_id].policy); | 196 | ss->cb[cb_id].policy, NULL); |
197 | if (err < 0) { | 197 | if (err < 0) { |
198 | rcu_read_unlock(); | 198 | rcu_read_unlock(); |
199 | return err; | 199 | return err; |
@@ -377,8 +377,8 @@ replay: | |||
377 | struct nlattr *attr = (void *)nlh + min_len; | 377 | struct nlattr *attr = (void *)nlh + min_len; |
378 | int attrlen = nlh->nlmsg_len - min_len; | 378 | int attrlen = nlh->nlmsg_len - min_len; |
379 | 379 | ||
380 | err = nla_parse(cda, ss->cb[cb_id].attr_count, | 380 | err = nla_parse(cda, ss->cb[cb_id].attr_count, attr, |
381 | attr, attrlen, ss->cb[cb_id].policy); | 381 | attrlen, ss->cb[cb_id].policy, NULL); |
382 | if (err < 0) | 382 | if (err < 0) |
383 | goto ack; | 383 | goto ack; |
384 | 384 | ||
@@ -467,7 +467,8 @@ static void nfnetlink_rcv_skb_batch(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
467 | skb->len < NLMSG_HDRLEN + sizeof(struct nfgenmsg)) | 467 | skb->len < NLMSG_HDRLEN + sizeof(struct nfgenmsg)) |
468 | return; | 468 | return; |
469 | 469 | ||
470 | err = nla_parse(cda, NFNL_BATCH_MAX, attr, attrlen, nfnl_batch_policy); | 470 | err = nla_parse(cda, NFNL_BATCH_MAX, attr, attrlen, nfnl_batch_policy, |
471 | NULL); | ||
471 | if (err < 0) { | 472 | if (err < 0) { |
472 | netlink_ack(skb, nlh, err, NULL); | 473 | netlink_ack(skb, nlh, err, NULL); |
473 | return; | 474 | return; |
diff --git a/net/netfilter/nfnetlink_acct.c b/net/netfilter/nfnetlink_acct.c index c86da174a5fc..2837d5fb98bd 100644 --- a/net/netfilter/nfnetlink_acct.c +++ b/net/netfilter/nfnetlink_acct.c | |||
@@ -244,7 +244,8 @@ nfacct_filter_alloc(const struct nlattr * const attr) | |||
244 | struct nlattr *tb[NFACCT_FILTER_MAX + 1]; | 244 | struct nlattr *tb[NFACCT_FILTER_MAX + 1]; |
245 | int err; | 245 | int err; |
246 | 246 | ||
247 | err = nla_parse_nested(tb, NFACCT_FILTER_MAX, attr, filter_policy); | 247 | err = nla_parse_nested(tb, NFACCT_FILTER_MAX, attr, filter_policy, |
248 | NULL); | ||
248 | if (err < 0) | 249 | if (err < 0) |
249 | return ERR_PTR(err); | 250 | return ERR_PTR(err); |
250 | 251 | ||
diff --git a/net/netfilter/nfnetlink_cthelper.c b/net/netfilter/nfnetlink_cthelper.c index d45558178da5..5b6c68311566 100644 --- a/net/netfilter/nfnetlink_cthelper.c +++ b/net/netfilter/nfnetlink_cthelper.c | |||
@@ -77,7 +77,8 @@ nfnl_cthelper_parse_tuple(struct nf_conntrack_tuple *tuple, | |||
77 | int err; | 77 | int err; |
78 | struct nlattr *tb[NFCTH_TUPLE_MAX+1]; | 78 | struct nlattr *tb[NFCTH_TUPLE_MAX+1]; |
79 | 79 | ||
80 | err = nla_parse_nested(tb, NFCTH_TUPLE_MAX, attr, nfnl_cthelper_tuple_pol); | 80 | err = nla_parse_nested(tb, NFCTH_TUPLE_MAX, attr, |
81 | nfnl_cthelper_tuple_pol, NULL); | ||
81 | if (err < 0) | 82 | if (err < 0) |
82 | return err; | 83 | return err; |
83 | 84 | ||
@@ -137,7 +138,8 @@ nfnl_cthelper_expect_policy(struct nf_conntrack_expect_policy *expect_policy, | |||
137 | int err; | 138 | int err; |
138 | struct nlattr *tb[NFCTH_POLICY_MAX+1]; | 139 | struct nlattr *tb[NFCTH_POLICY_MAX+1]; |
139 | 140 | ||
140 | err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr, nfnl_cthelper_expect_pol); | 141 | err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr, |
142 | nfnl_cthelper_expect_pol, NULL); | ||
141 | if (err < 0) | 143 | if (err < 0) |
142 | return err; | 144 | return err; |
143 | 145 | ||
@@ -171,7 +173,7 @@ nfnl_cthelper_parse_expect_policy(struct nf_conntrack_helper *helper, | |||
171 | unsigned int class_max; | 173 | unsigned int class_max; |
172 | 174 | ||
173 | ret = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr, | 175 | ret = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr, |
174 | nfnl_cthelper_expect_policy_set); | 176 | nfnl_cthelper_expect_policy_set, NULL); |
175 | if (ret < 0) | 177 | if (ret < 0) |
176 | return ret; | 178 | return ret; |
177 | 179 | ||
@@ -276,7 +278,7 @@ nfnl_cthelper_update_policy_one(const struct nf_conntrack_expect_policy *policy, | |||
276 | int err; | 278 | int err; |
277 | 279 | ||
278 | err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr, | 280 | err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr, |
279 | nfnl_cthelper_expect_pol); | 281 | nfnl_cthelper_expect_pol, NULL); |
280 | if (err < 0) | 282 | if (err < 0) |
281 | return err; | 283 | return err; |
282 | 284 | ||
@@ -336,7 +338,7 @@ static int nfnl_cthelper_update_policy(struct nf_conntrack_helper *helper, | |||
336 | int err; | 338 | int err; |
337 | 339 | ||
338 | err = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr, | 340 | err = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr, |
339 | nfnl_cthelper_expect_policy_set); | 341 | nfnl_cthelper_expect_policy_set, NULL); |
340 | if (err < 0) | 342 | if (err < 0) |
341 | return err; | 343 | return err; |
342 | 344 | ||
diff --git a/net/netfilter/nfnetlink_cttimeout.c b/net/netfilter/nfnetlink_cttimeout.c index 57c2cdf7b691..0a3510e7e396 100644 --- a/net/netfilter/nfnetlink_cttimeout.c +++ b/net/netfilter/nfnetlink_cttimeout.c | |||
@@ -56,7 +56,8 @@ ctnl_timeout_parse_policy(void *timeouts, struct nf_conntrack_l4proto *l4proto, | |||
56 | struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max+1]; | 56 | struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max+1]; |
57 | 57 | ||
58 | ret = nla_parse_nested(tb, l4proto->ctnl_timeout.nlattr_max, | 58 | ret = nla_parse_nested(tb, l4proto->ctnl_timeout.nlattr_max, |
59 | attr, l4proto->ctnl_timeout.nla_policy); | 59 | attr, l4proto->ctnl_timeout.nla_policy, |
60 | NULL); | ||
60 | if (ret < 0) | 61 | if (ret < 0) |
61 | return ret; | 62 | return ret; |
62 | 63 | ||
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c index 933509ebf3d3..3be6fef30581 100644 --- a/net/netfilter/nfnetlink_queue.c +++ b/net/netfilter/nfnetlink_queue.c | |||
@@ -1109,7 +1109,7 @@ static int nfqa_parse_bridge(struct nf_queue_entry *entry, | |||
1109 | int err; | 1109 | int err; |
1110 | 1110 | ||
1111 | err = nla_parse_nested(tb, NFQA_VLAN_MAX, nfqa[NFQA_VLAN], | 1111 | err = nla_parse_nested(tb, NFQA_VLAN_MAX, nfqa[NFQA_VLAN], |
1112 | nfqa_vlan_policy); | 1112 | nfqa_vlan_policy, NULL); |
1113 | if (err < 0) | 1113 | if (err < 0) |
1114 | return err; | 1114 | return err; |
1115 | 1115 | ||
diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c index fab6bf3f955e..d76d0f36799f 100644 --- a/net/netfilter/nft_compat.c +++ b/net/netfilter/nft_compat.c | |||
@@ -200,7 +200,7 @@ static int nft_parse_compat(const struct nlattr *attr, u16 *proto, bool *inv) | |||
200 | int err; | 200 | int err; |
201 | 201 | ||
202 | err = nla_parse_nested(tb, NFTA_RULE_COMPAT_MAX, attr, | 202 | err = nla_parse_nested(tb, NFTA_RULE_COMPAT_MAX, attr, |
203 | nft_rule_compat_policy); | 203 | nft_rule_compat_policy, NULL); |
204 | if (err < 0) | 204 | if (err < 0) |
205 | return err; | 205 | return err; |
206 | 206 | ||
diff --git a/net/netlabel/netlabel_cipso_v4.c b/net/netlabel/netlabel_cipso_v4.c index 4149d3e63589..9aacf2da3d98 100644 --- a/net/netlabel/netlabel_cipso_v4.c +++ b/net/netlabel/netlabel_cipso_v4.c | |||
@@ -101,7 +101,7 @@ static int netlbl_cipsov4_add_common(struct genl_info *info, | |||
101 | 101 | ||
102 | if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_TAGLST], | 102 | if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_TAGLST], |
103 | NLBL_CIPSOV4_A_MAX, | 103 | NLBL_CIPSOV4_A_MAX, |
104 | netlbl_cipsov4_genl_policy) != 0) | 104 | netlbl_cipsov4_genl_policy, NULL) != 0) |
105 | return -EINVAL; | 105 | return -EINVAL; |
106 | 106 | ||
107 | nla_for_each_nested(nla, info->attrs[NLBL_CIPSOV4_A_TAGLST], nla_rem) | 107 | nla_for_each_nested(nla, info->attrs[NLBL_CIPSOV4_A_TAGLST], nla_rem) |
@@ -148,7 +148,7 @@ static int netlbl_cipsov4_add_std(struct genl_info *info, | |||
148 | 148 | ||
149 | if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], | 149 | if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], |
150 | NLBL_CIPSOV4_A_MAX, | 150 | NLBL_CIPSOV4_A_MAX, |
151 | netlbl_cipsov4_genl_policy) != 0) | 151 | netlbl_cipsov4_genl_policy, NULL) != 0) |
152 | return -EINVAL; | 152 | return -EINVAL; |
153 | 153 | ||
154 | doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL); | 154 | doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL); |
@@ -170,10 +170,10 @@ static int netlbl_cipsov4_add_std(struct genl_info *info, | |||
170 | info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], | 170 | info->attrs[NLBL_CIPSOV4_A_MLSLVLLST], |
171 | nla_a_rem) | 171 | nla_a_rem) |
172 | if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSLVL) { | 172 | if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSLVL) { |
173 | if (nla_validate_nested(nla_a, | 173 | if (nla_validate_nested(nla_a, NLBL_CIPSOV4_A_MAX, |
174 | NLBL_CIPSOV4_A_MAX, | 174 | netlbl_cipsov4_genl_policy, |
175 | netlbl_cipsov4_genl_policy) != 0) | 175 | NULL) != 0) |
176 | goto add_std_failure; | 176 | goto add_std_failure; |
177 | nla_for_each_nested(nla_b, nla_a, nla_b_rem) | 177 | nla_for_each_nested(nla_b, nla_a, nla_b_rem) |
178 | switch (nla_type(nla_b)) { | 178 | switch (nla_type(nla_b)) { |
179 | case NLBL_CIPSOV4_A_MLSLVLLOC: | 179 | case NLBL_CIPSOV4_A_MLSLVLLOC: |
@@ -236,7 +236,7 @@ static int netlbl_cipsov4_add_std(struct genl_info *info, | |||
236 | if (info->attrs[NLBL_CIPSOV4_A_MLSCATLST]) { | 236 | if (info->attrs[NLBL_CIPSOV4_A_MLSCATLST]) { |
237 | if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSCATLST], | 237 | if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSCATLST], |
238 | NLBL_CIPSOV4_A_MAX, | 238 | NLBL_CIPSOV4_A_MAX, |
239 | netlbl_cipsov4_genl_policy) != 0) | 239 | netlbl_cipsov4_genl_policy, NULL) != 0) |
240 | goto add_std_failure; | 240 | goto add_std_failure; |
241 | 241 | ||
242 | nla_for_each_nested(nla_a, | 242 | nla_for_each_nested(nla_a, |
@@ -244,8 +244,9 @@ static int netlbl_cipsov4_add_std(struct genl_info *info, | |||
244 | nla_a_rem) | 244 | nla_a_rem) |
245 | if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSCAT) { | 245 | if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSCAT) { |
246 | if (nla_validate_nested(nla_a, | 246 | if (nla_validate_nested(nla_a, |
247 | NLBL_CIPSOV4_A_MAX, | 247 | NLBL_CIPSOV4_A_MAX, |
248 | netlbl_cipsov4_genl_policy) != 0) | 248 | netlbl_cipsov4_genl_policy, |
249 | NULL) != 0) | ||
249 | goto add_std_failure; | 250 | goto add_std_failure; |
250 | nla_for_each_nested(nla_b, nla_a, nla_b_rem) | 251 | nla_for_each_nested(nla_b, nla_a, nla_b_rem) |
251 | switch (nla_type(nla_b)) { | 252 | switch (nla_type(nla_b)) { |
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index 4b598a5999a2..ff6db5e66eb5 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
@@ -574,7 +574,7 @@ static int genl_family_rcv_msg(const struct genl_family *family, | |||
574 | 574 | ||
575 | if (attrbuf) { | 575 | if (attrbuf) { |
576 | err = nlmsg_parse(nlh, hdrlen, attrbuf, family->maxattr, | 576 | err = nlmsg_parse(nlh, hdrlen, attrbuf, family->maxattr, |
577 | ops->policy); | 577 | ops->policy, NULL); |
578 | if (err < 0) | 578 | if (err < 0) |
579 | goto out; | 579 | goto out; |
580 | } | 580 | } |
diff --git a/net/nfc/netlink.c b/net/nfc/netlink.c index 03f3d5c7beb8..aca903c12671 100644 --- a/net/nfc/netlink.c +++ b/net/nfc/netlink.c | |||
@@ -119,7 +119,8 @@ static struct nfc_dev *__get_device_from_cb(struct netlink_callback *cb) | |||
119 | u32 idx; | 119 | u32 idx; |
120 | 120 | ||
121 | rc = nlmsg_parse(cb->nlh, GENL_HDRLEN + nfc_genl_family.hdrsize, | 121 | rc = nlmsg_parse(cb->nlh, GENL_HDRLEN + nfc_genl_family.hdrsize, |
122 | attrbuf, nfc_genl_family.maxattr, nfc_genl_policy); | 122 | attrbuf, nfc_genl_family.maxattr, nfc_genl_policy, |
123 | NULL); | ||
123 | if (rc < 0) | 124 | if (rc < 0) |
124 | return ERR_PTR(rc); | 125 | return ERR_PTR(rc); |
125 | 126 | ||
@@ -1161,7 +1162,7 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info) | |||
1161 | 1162 | ||
1162 | nla_for_each_nested(attr, info->attrs[NFC_ATTR_LLC_SDP], rem) { | 1163 | nla_for_each_nested(attr, info->attrs[NFC_ATTR_LLC_SDP], rem) { |
1163 | rc = nla_parse_nested(sdp_attrs, NFC_SDP_ATTR_MAX, attr, | 1164 | rc = nla_parse_nested(sdp_attrs, NFC_SDP_ATTR_MAX, attr, |
1164 | nfc_sdp_genl_policy); | 1165 | nfc_sdp_genl_policy, NULL); |
1165 | 1166 | ||
1166 | if (rc != 0) { | 1167 | if (rc != 0) { |
1167 | rc = -EINVAL; | 1168 | rc = -EINVAL; |
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c index 9c62b6325f7a..7b17da9a94a0 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c | |||
@@ -1353,7 +1353,7 @@ static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
1353 | int err; | 1353 | int err; |
1354 | 1354 | ||
1355 | err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a, | 1355 | err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a, |
1356 | OVS_FLOW_ATTR_MAX, flow_policy); | 1356 | OVS_FLOW_ATTR_MAX, flow_policy, NULL); |
1357 | if (err) | 1357 | if (err) |
1358 | return err; | 1358 | return err; |
1359 | ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]); | 1359 | ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]); |
diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c index df82b81a9b35..7e1d8a2afa63 100644 --- a/net/openvswitch/flow_netlink.c +++ b/net/openvswitch/flow_netlink.c | |||
@@ -2427,8 +2427,8 @@ static int validate_userspace(const struct nlattr *attr) | |||
2427 | struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1]; | 2427 | struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1]; |
2428 | int error; | 2428 | int error; |
2429 | 2429 | ||
2430 | error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX, | 2430 | error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX, attr, |
2431 | attr, userspace_policy); | 2431 | userspace_policy, NULL); |
2432 | if (error) | 2432 | if (error) |
2433 | return error; | 2433 | return error; |
2434 | 2434 | ||
diff --git a/net/openvswitch/vport-vxlan.c b/net/openvswitch/vport-vxlan.c index 7eb955e453e6..869acb3b3d3f 100644 --- a/net/openvswitch/vport-vxlan.c +++ b/net/openvswitch/vport-vxlan.c | |||
@@ -70,7 +70,8 @@ static int vxlan_configure_exts(struct vport *vport, struct nlattr *attr, | |||
70 | if (nla_len(attr) < sizeof(struct nlattr)) | 70 | if (nla_len(attr) < sizeof(struct nlattr)) |
71 | return -EINVAL; | 71 | return -EINVAL; |
72 | 72 | ||
73 | err = nla_parse_nested(exts, OVS_VXLAN_EXT_MAX, attr, exts_policy); | 73 | err = nla_parse_nested(exts, OVS_VXLAN_EXT_MAX, attr, exts_policy, |
74 | NULL); | ||
74 | if (err < 0) | 75 | if (err < 0) |
75 | return err; | 76 | return err; |
76 | 77 | ||
diff --git a/net/phonet/pn_netlink.c b/net/phonet/pn_netlink.c index bc5ee5fbe6ae..363799bf97f6 100644 --- a/net/phonet/pn_netlink.c +++ b/net/phonet/pn_netlink.c | |||
@@ -78,7 +78,8 @@ static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
78 | 78 | ||
79 | ASSERT_RTNL(); | 79 | ASSERT_RTNL(); |
80 | 80 | ||
81 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy); | 81 | err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy, |
82 | NULL); | ||
82 | if (err < 0) | 83 | if (err < 0) |
83 | return err; | 84 | return err; |
84 | 85 | ||
@@ -243,7 +244,8 @@ static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
243 | 244 | ||
244 | ASSERT_RTNL(); | 245 | ASSERT_RTNL(); |
245 | 246 | ||
246 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_phonet_policy); | 247 | err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_phonet_policy, |
248 | NULL); | ||
247 | if (err < 0) | 249 | if (err < 0) |
248 | return err; | 250 | return err; |
249 | 251 | ||
diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c index ae5ac175b2be..7fdbb34002f5 100644 --- a/net/qrtr/qrtr.c +++ b/net/qrtr/qrtr.c | |||
@@ -957,7 +957,7 @@ static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
957 | 957 | ||
958 | ASSERT_RTNL(); | 958 | ASSERT_RTNL(); |
959 | 959 | ||
960 | rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy); | 960 | rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy, NULL); |
961 | if (rc < 0) | 961 | if (rc < 0) |
962 | return rc; | 962 | return rc; |
963 | 963 | ||
diff --git a/net/sched/act_api.c b/net/sched/act_api.c index b70aa57319ea..79d875c6e8a0 100644 --- a/net/sched/act_api.c +++ b/net/sched/act_api.c | |||
@@ -557,7 +557,7 @@ struct tc_action *tcf_action_init_1(struct net *net, struct nlattr *nla, | |||
557 | int err; | 557 | int err; |
558 | 558 | ||
559 | if (name == NULL) { | 559 | if (name == NULL) { |
560 | err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL); | 560 | err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL, NULL); |
561 | if (err < 0) | 561 | if (err < 0) |
562 | goto err_out; | 562 | goto err_out; |
563 | err = -EINVAL; | 563 | err = -EINVAL; |
@@ -654,7 +654,7 @@ int tcf_action_init(struct net *net, struct nlattr *nla, struct nlattr *est, | |||
654 | int err; | 654 | int err; |
655 | int i; | 655 | int i; |
656 | 656 | ||
657 | err = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL); | 657 | err = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL, NULL); |
658 | if (err < 0) | 658 | if (err < 0) |
659 | return err; | 659 | return err; |
660 | 660 | ||
@@ -786,7 +786,7 @@ static struct tc_action *tcf_action_get_1(struct net *net, struct nlattr *nla, | |||
786 | int index; | 786 | int index; |
787 | int err; | 787 | int err; |
788 | 788 | ||
789 | err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL); | 789 | err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL, NULL); |
790 | if (err < 0) | 790 | if (err < 0) |
791 | goto err_out; | 791 | goto err_out; |
792 | 792 | ||
@@ -835,7 +835,7 @@ static int tca_action_flush(struct net *net, struct nlattr *nla, | |||
835 | 835 | ||
836 | b = skb_tail_pointer(skb); | 836 | b = skb_tail_pointer(skb); |
837 | 837 | ||
838 | err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL); | 838 | err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL, NULL); |
839 | if (err < 0) | 839 | if (err < 0) |
840 | goto err_out; | 840 | goto err_out; |
841 | 841 | ||
@@ -921,7 +921,7 @@ tca_action_gd(struct net *net, struct nlattr *nla, struct nlmsghdr *n, | |||
921 | struct tc_action *act; | 921 | struct tc_action *act; |
922 | LIST_HEAD(actions); | 922 | LIST_HEAD(actions); |
923 | 923 | ||
924 | ret = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL); | 924 | ret = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL, NULL); |
925 | if (ret < 0) | 925 | if (ret < 0) |
926 | return ret; | 926 | return ret; |
927 | 927 | ||
@@ -1004,7 +1004,8 @@ static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n) | |||
1004 | !netlink_capable(skb, CAP_NET_ADMIN)) | 1004 | !netlink_capable(skb, CAP_NET_ADMIN)) |
1005 | return -EPERM; | 1005 | return -EPERM; |
1006 | 1006 | ||
1007 | ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL); | 1007 | ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL, |
1008 | NULL); | ||
1008 | if (ret < 0) | 1009 | if (ret < 0) |
1009 | return ret; | 1010 | return ret; |
1010 | 1011 | ||
@@ -1051,19 +1052,20 @@ static struct nlattr *find_dump_kind(const struct nlmsghdr *n) | |||
1051 | struct nlattr *nla[TCAA_MAX + 1]; | 1052 | struct nlattr *nla[TCAA_MAX + 1]; |
1052 | struct nlattr *kind; | 1053 | struct nlattr *kind; |
1053 | 1054 | ||
1054 | if (nlmsg_parse(n, sizeof(struct tcamsg), nla, TCAA_MAX, NULL) < 0) | 1055 | if (nlmsg_parse(n, sizeof(struct tcamsg), nla, TCAA_MAX, |
1056 | NULL, NULL) < 0) | ||
1055 | return NULL; | 1057 | return NULL; |
1056 | tb1 = nla[TCA_ACT_TAB]; | 1058 | tb1 = nla[TCA_ACT_TAB]; |
1057 | if (tb1 == NULL) | 1059 | if (tb1 == NULL) |
1058 | return NULL; | 1060 | return NULL; |
1059 | 1061 | ||
1060 | if (nla_parse(tb, TCA_ACT_MAX_PRIO, nla_data(tb1), | 1062 | if (nla_parse(tb, TCA_ACT_MAX_PRIO, nla_data(tb1), |
1061 | NLMSG_ALIGN(nla_len(tb1)), NULL) < 0) | 1063 | NLMSG_ALIGN(nla_len(tb1)), NULL, NULL) < 0) |
1062 | return NULL; | 1064 | return NULL; |
1063 | 1065 | ||
1064 | if (tb[1] == NULL) | 1066 | if (tb[1] == NULL) |
1065 | return NULL; | 1067 | return NULL; |
1066 | if (nla_parse_nested(tb2, TCA_ACT_MAX, tb[1], NULL) < 0) | 1068 | if (nla_parse_nested(tb2, TCA_ACT_MAX, tb[1], NULL, NULL) < 0) |
1067 | return NULL; | 1069 | return NULL; |
1068 | kind = tb2[TCA_ACT_KIND]; | 1070 | kind = tb2[TCA_ACT_KIND]; |
1069 | 1071 | ||
diff --git a/net/sched/act_bpf.c b/net/sched/act_bpf.c index 520baa41cba3..d33947d6e9d0 100644 --- a/net/sched/act_bpf.c +++ b/net/sched/act_bpf.c | |||
@@ -283,7 +283,7 @@ static int tcf_bpf_init(struct net *net, struct nlattr *nla, | |||
283 | if (!nla) | 283 | if (!nla) |
284 | return -EINVAL; | 284 | return -EINVAL; |
285 | 285 | ||
286 | ret = nla_parse_nested(tb, TCA_ACT_BPF_MAX, nla, act_bpf_policy); | 286 | ret = nla_parse_nested(tb, TCA_ACT_BPF_MAX, nla, act_bpf_policy, NULL); |
287 | if (ret < 0) | 287 | if (ret < 0) |
288 | return ret; | 288 | return ret; |
289 | 289 | ||
diff --git a/net/sched/act_connmark.c b/net/sched/act_connmark.c index f9bb43c25697..2155bc6c6a1e 100644 --- a/net/sched/act_connmark.c +++ b/net/sched/act_connmark.c | |||
@@ -109,7 +109,8 @@ static int tcf_connmark_init(struct net *net, struct nlattr *nla, | |||
109 | if (!nla) | 109 | if (!nla) |
110 | return -EINVAL; | 110 | return -EINVAL; |
111 | 111 | ||
112 | ret = nla_parse_nested(tb, TCA_CONNMARK_MAX, nla, connmark_policy); | 112 | ret = nla_parse_nested(tb, TCA_CONNMARK_MAX, nla, connmark_policy, |
113 | NULL); | ||
113 | if (ret < 0) | 114 | if (ret < 0) |
114 | return ret; | 115 | return ret; |
115 | 116 | ||
diff --git a/net/sched/act_csum.c b/net/sched/act_csum.c index 6c319a40c1cc..ab6fdbd34db7 100644 --- a/net/sched/act_csum.c +++ b/net/sched/act_csum.c | |||
@@ -59,7 +59,7 @@ static int tcf_csum_init(struct net *net, struct nlattr *nla, | |||
59 | if (nla == NULL) | 59 | if (nla == NULL) |
60 | return -EINVAL; | 60 | return -EINVAL; |
61 | 61 | ||
62 | err = nla_parse_nested(tb, TCA_CSUM_MAX, nla, csum_policy); | 62 | err = nla_parse_nested(tb, TCA_CSUM_MAX, nla, csum_policy, NULL); |
63 | if (err < 0) | 63 | if (err < 0) |
64 | return err; | 64 | return err; |
65 | 65 | ||
diff --git a/net/sched/act_gact.c b/net/sched/act_gact.c index e6c874a2b283..99afe8b1f1fb 100644 --- a/net/sched/act_gact.c +++ b/net/sched/act_gact.c | |||
@@ -73,7 +73,7 @@ static int tcf_gact_init(struct net *net, struct nlattr *nla, | |||
73 | if (nla == NULL) | 73 | if (nla == NULL) |
74 | return -EINVAL; | 74 | return -EINVAL; |
75 | 75 | ||
76 | err = nla_parse_nested(tb, TCA_GACT_MAX, nla, gact_policy); | 76 | err = nla_parse_nested(tb, TCA_GACT_MAX, nla, gact_policy, NULL); |
77 | if (err < 0) | 77 | if (err < 0) |
78 | return err; | 78 | return err; |
79 | 79 | ||
diff --git a/net/sched/act_ife.c b/net/sched/act_ife.c index c75ea5c9102c..c5dec308b8b1 100644 --- a/net/sched/act_ife.c +++ b/net/sched/act_ife.c | |||
@@ -443,7 +443,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla, | |||
443 | int ret = 0; | 443 | int ret = 0; |
444 | int err; | 444 | int err; |
445 | 445 | ||
446 | err = nla_parse_nested(tb, TCA_IFE_MAX, nla, ife_policy); | 446 | err = nla_parse_nested(tb, TCA_IFE_MAX, nla, ife_policy, NULL); |
447 | if (err < 0) | 447 | if (err < 0) |
448 | return err; | 448 | return err; |
449 | 449 | ||
@@ -514,7 +514,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla, | |||
514 | 514 | ||
515 | if (tb[TCA_IFE_METALST]) { | 515 | if (tb[TCA_IFE_METALST]) { |
516 | err = nla_parse_nested(tb2, IFE_META_MAX, tb[TCA_IFE_METALST], | 516 | err = nla_parse_nested(tb2, IFE_META_MAX, tb[TCA_IFE_METALST], |
517 | NULL); | 517 | NULL, NULL); |
518 | if (err) { | 518 | if (err) { |
519 | metadata_parse_err: | 519 | metadata_parse_err: |
520 | if (exists) | 520 | if (exists) |
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c index 992ef8d624f1..36f0ced9e60c 100644 --- a/net/sched/act_ipt.c +++ b/net/sched/act_ipt.c | |||
@@ -107,7 +107,7 @@ static int __tcf_ipt_init(struct tc_action_net *tn, struct nlattr *nla, | |||
107 | if (nla == NULL) | 107 | if (nla == NULL) |
108 | return -EINVAL; | 108 | return -EINVAL; |
109 | 109 | ||
110 | err = nla_parse_nested(tb, TCA_IPT_MAX, nla, ipt_policy); | 110 | err = nla_parse_nested(tb, TCA_IPT_MAX, nla, ipt_policy, NULL); |
111 | if (err < 0) | 111 | if (err < 0) |
112 | return err; | 112 | return err; |
113 | 113 | ||
diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index af49c7dca860..1b5549ababd4 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c | |||
@@ -87,7 +87,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla, | |||
87 | 87 | ||
88 | if (nla == NULL) | 88 | if (nla == NULL) |
89 | return -EINVAL; | 89 | return -EINVAL; |
90 | ret = nla_parse_nested(tb, TCA_MIRRED_MAX, nla, mirred_policy); | 90 | ret = nla_parse_nested(tb, TCA_MIRRED_MAX, nla, mirred_policy, NULL); |
91 | if (ret < 0) | 91 | if (ret < 0) |
92 | return ret; | 92 | return ret; |
93 | if (tb[TCA_MIRRED_PARMS] == NULL) | 93 | if (tb[TCA_MIRRED_PARMS] == NULL) |
diff --git a/net/sched/act_nat.c b/net/sched/act_nat.c index 9b6aec665495..9016ab8a0649 100644 --- a/net/sched/act_nat.c +++ b/net/sched/act_nat.c | |||
@@ -50,7 +50,7 @@ static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est, | |||
50 | if (nla == NULL) | 50 | if (nla == NULL) |
51 | return -EINVAL; | 51 | return -EINVAL; |
52 | 52 | ||
53 | err = nla_parse_nested(tb, TCA_NAT_MAX, nla, nat_policy); | 53 | err = nla_parse_nested(tb, TCA_NAT_MAX, nla, nat_policy, NULL); |
54 | if (err < 0) | 54 | if (err < 0) |
55 | return err; | 55 | return err; |
56 | 56 | ||
diff --git a/net/sched/act_pedit.c b/net/sched/act_pedit.c index c1310472f620..164b5ac094be 100644 --- a/net/sched/act_pedit.c +++ b/net/sched/act_pedit.c | |||
@@ -72,7 +72,7 @@ static struct tcf_pedit_key_ex *tcf_pedit_keys_ex_parse(struct nlattr *nla, | |||
72 | } | 72 | } |
73 | 73 | ||
74 | err = nla_parse_nested(tb, TCA_PEDIT_KEY_EX_MAX, ka, | 74 | err = nla_parse_nested(tb, TCA_PEDIT_KEY_EX_MAX, ka, |
75 | pedit_key_ex_policy); | 75 | pedit_key_ex_policy, NULL); |
76 | if (err) | 76 | if (err) |
77 | goto err_out; | 77 | goto err_out; |
78 | 78 | ||
@@ -147,7 +147,7 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla, | |||
147 | if (nla == NULL) | 147 | if (nla == NULL) |
148 | return -EINVAL; | 148 | return -EINVAL; |
149 | 149 | ||
150 | err = nla_parse_nested(tb, TCA_PEDIT_MAX, nla, pedit_policy); | 150 | err = nla_parse_nested(tb, TCA_PEDIT_MAX, nla, pedit_policy, NULL); |
151 | if (err < 0) | 151 | if (err < 0) |
152 | return err; | 152 | return err; |
153 | 153 | ||
diff --git a/net/sched/act_police.c b/net/sched/act_police.c index 0ba91d1ce994..f42008b29311 100644 --- a/net/sched/act_police.c +++ b/net/sched/act_police.c | |||
@@ -90,7 +90,7 @@ static int tcf_act_police_init(struct net *net, struct nlattr *nla, | |||
90 | if (nla == NULL) | 90 | if (nla == NULL) |
91 | return -EINVAL; | 91 | return -EINVAL; |
92 | 92 | ||
93 | err = nla_parse_nested(tb, TCA_POLICE_MAX, nla, police_policy); | 93 | err = nla_parse_nested(tb, TCA_POLICE_MAX, nla, police_policy, NULL); |
94 | if (err < 0) | 94 | if (err < 0) |
95 | return err; | 95 | return err; |
96 | 96 | ||
diff --git a/net/sched/act_sample.c b/net/sched/act_sample.c index 0b8217b4763f..59d6645a4007 100644 --- a/net/sched/act_sample.c +++ b/net/sched/act_sample.c | |||
@@ -50,7 +50,7 @@ static int tcf_sample_init(struct net *net, struct nlattr *nla, | |||
50 | 50 | ||
51 | if (!nla) | 51 | if (!nla) |
52 | return -EINVAL; | 52 | return -EINVAL; |
53 | ret = nla_parse_nested(tb, TCA_SAMPLE_MAX, nla, sample_policy); | 53 | ret = nla_parse_nested(tb, TCA_SAMPLE_MAX, nla, sample_policy, NULL); |
54 | if (ret < 0) | 54 | if (ret < 0) |
55 | return ret; | 55 | return ret; |
56 | if (!tb[TCA_SAMPLE_PARMS] || !tb[TCA_SAMPLE_RATE] || | 56 | if (!tb[TCA_SAMPLE_PARMS] || !tb[TCA_SAMPLE_RATE] || |
diff --git a/net/sched/act_simple.c b/net/sched/act_simple.c index 823a73ad0c60..43605e7ce051 100644 --- a/net/sched/act_simple.c +++ b/net/sched/act_simple.c | |||
@@ -94,7 +94,7 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla, | |||
94 | if (nla == NULL) | 94 | if (nla == NULL) |
95 | return -EINVAL; | 95 | return -EINVAL; |
96 | 96 | ||
97 | err = nla_parse_nested(tb, TCA_DEF_MAX, nla, simple_policy); | 97 | err = nla_parse_nested(tb, TCA_DEF_MAX, nla, simple_policy, NULL); |
98 | if (err < 0) | 98 | if (err < 0) |
99 | return err; | 99 | return err; |
100 | 100 | ||
diff --git a/net/sched/act_skbedit.c b/net/sched/act_skbedit.c index 06ccae3c12ee..6b3e65d7de0c 100644 --- a/net/sched/act_skbedit.c +++ b/net/sched/act_skbedit.c | |||
@@ -82,7 +82,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla, | |||
82 | if (nla == NULL) | 82 | if (nla == NULL) |
83 | return -EINVAL; | 83 | return -EINVAL; |
84 | 84 | ||
85 | err = nla_parse_nested(tb, TCA_SKBEDIT_MAX, nla, skbedit_policy); | 85 | err = nla_parse_nested(tb, TCA_SKBEDIT_MAX, nla, skbedit_policy, NULL); |
86 | if (err < 0) | 86 | if (err < 0) |
87 | return err; | 87 | return err; |
88 | 88 | ||
diff --git a/net/sched/act_skbmod.c b/net/sched/act_skbmod.c index c736627f8f4a..a73c4bbcada2 100644 --- a/net/sched/act_skbmod.c +++ b/net/sched/act_skbmod.c | |||
@@ -103,7 +103,7 @@ static int tcf_skbmod_init(struct net *net, struct nlattr *nla, | |||
103 | if (!nla) | 103 | if (!nla) |
104 | return -EINVAL; | 104 | return -EINVAL; |
105 | 105 | ||
106 | err = nla_parse_nested(tb, TCA_SKBMOD_MAX, nla, skbmod_policy); | 106 | err = nla_parse_nested(tb, TCA_SKBMOD_MAX, nla, skbmod_policy, NULL); |
107 | if (err < 0) | 107 | if (err < 0) |
108 | return err; | 108 | return err; |
109 | 109 | ||
diff --git a/net/sched/act_tunnel_key.c b/net/sched/act_tunnel_key.c index e3a58e021198..b9a2f241a5b3 100644 --- a/net/sched/act_tunnel_key.c +++ b/net/sched/act_tunnel_key.c | |||
@@ -89,7 +89,8 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla, | |||
89 | if (!nla) | 89 | if (!nla) |
90 | return -EINVAL; | 90 | return -EINVAL; |
91 | 91 | ||
92 | err = nla_parse_nested(tb, TCA_TUNNEL_KEY_MAX, nla, tunnel_key_policy); | 92 | err = nla_parse_nested(tb, TCA_TUNNEL_KEY_MAX, nla, tunnel_key_policy, |
93 | NULL); | ||
93 | if (err < 0) | 94 | if (err < 0) |
94 | return err; | 95 | return err; |
95 | 96 | ||
diff --git a/net/sched/act_vlan.c b/net/sched/act_vlan.c index 19e0dba305ce..13ba3a89f675 100644 --- a/net/sched/act_vlan.c +++ b/net/sched/act_vlan.c | |||
@@ -121,7 +121,7 @@ static int tcf_vlan_init(struct net *net, struct nlattr *nla, | |||
121 | if (!nla) | 121 | if (!nla) |
122 | return -EINVAL; | 122 | return -EINVAL; |
123 | 123 | ||
124 | err = nla_parse_nested(tb, TCA_VLAN_MAX, nla, vlan_policy); | 124 | err = nla_parse_nested(tb, TCA_VLAN_MAX, nla, vlan_policy, NULL); |
125 | if (err < 0) | 125 | if (err < 0) |
126 | return err; | 126 | return err; |
127 | 127 | ||
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 732f7cae459d..e2c68c30f97d 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c | |||
@@ -229,7 +229,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n) | |||
229 | replay: | 229 | replay: |
230 | tp_created = 0; | 230 | tp_created = 0; |
231 | 231 | ||
232 | err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL); | 232 | err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL, NULL); |
233 | if (err < 0) | 233 | if (err < 0) |
234 | return err; | 234 | return err; |
235 | 235 | ||
diff --git a/net/sched/cls_basic.c b/net/sched/cls_basic.c index 5877f6061b57..422414f16b38 100644 --- a/net/sched/cls_basic.c +++ b/net/sched/cls_basic.c | |||
@@ -174,7 +174,7 @@ static int basic_change(struct net *net, struct sk_buff *in_skb, | |||
174 | return -EINVAL; | 174 | return -EINVAL; |
175 | 175 | ||
176 | err = nla_parse_nested(tb, TCA_BASIC_MAX, tca[TCA_OPTIONS], | 176 | err = nla_parse_nested(tb, TCA_BASIC_MAX, tca[TCA_OPTIONS], |
177 | basic_policy); | 177 | basic_policy, NULL); |
178 | if (err < 0) | 178 | if (err < 0) |
179 | return err; | 179 | return err; |
180 | 180 | ||
diff --git a/net/sched/cls_bpf.c b/net/sched/cls_bpf.c index 80f688436dd7..7ddd08efaa0f 100644 --- a/net/sched/cls_bpf.c +++ b/net/sched/cls_bpf.c | |||
@@ -478,7 +478,8 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb, | |||
478 | if (tca[TCA_OPTIONS] == NULL) | 478 | if (tca[TCA_OPTIONS] == NULL) |
479 | return -EINVAL; | 479 | return -EINVAL; |
480 | 480 | ||
481 | ret = nla_parse_nested(tb, TCA_BPF_MAX, tca[TCA_OPTIONS], bpf_policy); | 481 | ret = nla_parse_nested(tb, TCA_BPF_MAX, tca[TCA_OPTIONS], bpf_policy, |
482 | NULL); | ||
482 | if (ret < 0) | 483 | if (ret < 0) |
483 | return ret; | 484 | return ret; |
484 | 485 | ||
diff --git a/net/sched/cls_cgroup.c b/net/sched/cls_cgroup.c index c1f20077837f..b5e7c1bee6c3 100644 --- a/net/sched/cls_cgroup.c +++ b/net/sched/cls_cgroup.c | |||
@@ -99,7 +99,7 @@ static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb, | |||
99 | new->handle = handle; | 99 | new->handle = handle; |
100 | new->tp = tp; | 100 | new->tp = tp; |
101 | err = nla_parse_nested(tb, TCA_CGROUP_MAX, tca[TCA_OPTIONS], | 101 | err = nla_parse_nested(tb, TCA_CGROUP_MAX, tca[TCA_OPTIONS], |
102 | cgroup_policy); | 102 | cgroup_policy, NULL); |
103 | if (err < 0) | 103 | if (err < 0) |
104 | goto errout; | 104 | goto errout; |
105 | 105 | ||
diff --git a/net/sched/cls_flow.c b/net/sched/cls_flow.c index ca193af8634a..008ba7e63b7a 100644 --- a/net/sched/cls_flow.c +++ b/net/sched/cls_flow.c | |||
@@ -400,7 +400,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb, | |||
400 | if (opt == NULL) | 400 | if (opt == NULL) |
401 | return -EINVAL; | 401 | return -EINVAL; |
402 | 402 | ||
403 | err = nla_parse_nested(tb, TCA_FLOW_MAX, opt, flow_policy); | 403 | err = nla_parse_nested(tb, TCA_FLOW_MAX, opt, flow_policy, NULL); |
404 | if (err < 0) | 404 | if (err < 0) |
405 | return err; | 405 | return err; |
406 | 406 | ||
diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 9d0c99d2e9fb..3e7bd7801aa8 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c | |||
@@ -848,7 +848,8 @@ static int fl_change(struct net *net, struct sk_buff *in_skb, | |||
848 | if (!tb) | 848 | if (!tb) |
849 | return -ENOBUFS; | 849 | return -ENOBUFS; |
850 | 850 | ||
851 | err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS], fl_policy); | 851 | err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS], |
852 | fl_policy, NULL); | ||
852 | if (err < 0) | 853 | if (err < 0) |
853 | goto errout_tb; | 854 | goto errout_tb; |
854 | 855 | ||
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c index 9dc63d54e167..996209083c6b 100644 --- a/net/sched/cls_fw.c +++ b/net/sched/cls_fw.c | |||
@@ -250,7 +250,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb, | |||
250 | if (!opt) | 250 | if (!opt) |
251 | return handle ? -EINVAL : 0; /* Succeed if it is old method. */ | 251 | return handle ? -EINVAL : 0; /* Succeed if it is old method. */ |
252 | 252 | ||
253 | err = nla_parse_nested(tb, TCA_FW_MAX, opt, fw_policy); | 253 | err = nla_parse_nested(tb, TCA_FW_MAX, opt, fw_policy, NULL); |
254 | if (err < 0) | 254 | if (err < 0) |
255 | return err; | 255 | return err; |
256 | 256 | ||
diff --git a/net/sched/cls_matchall.c b/net/sched/cls_matchall.c index 224eb2c14346..0dbcca62aa6a 100644 --- a/net/sched/cls_matchall.c +++ b/net/sched/cls_matchall.c | |||
@@ -161,8 +161,8 @@ static int mall_change(struct net *net, struct sk_buff *in_skb, | |||
161 | if (head) | 161 | if (head) |
162 | return -EEXIST; | 162 | return -EEXIST; |
163 | 163 | ||
164 | err = nla_parse_nested(tb, TCA_MATCHALL_MAX, | 164 | err = nla_parse_nested(tb, TCA_MATCHALL_MAX, tca[TCA_OPTIONS], |
165 | tca[TCA_OPTIONS], mall_policy); | 165 | mall_policy, NULL); |
166 | if (err < 0) | 166 | if (err < 0) |
167 | return err; | 167 | return err; |
168 | 168 | ||
diff --git a/net/sched/cls_route.c b/net/sched/cls_route.c index 455fc8f83d0a..a371075c1d7a 100644 --- a/net/sched/cls_route.c +++ b/net/sched/cls_route.c | |||
@@ -489,7 +489,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb, | |||
489 | if (opt == NULL) | 489 | if (opt == NULL) |
490 | return handle ? -EINVAL : 0; | 490 | return handle ? -EINVAL : 0; |
491 | 491 | ||
492 | err = nla_parse_nested(tb, TCA_ROUTE4_MAX, opt, route4_policy); | 492 | err = nla_parse_nested(tb, TCA_ROUTE4_MAX, opt, route4_policy, NULL); |
493 | if (err < 0) | 493 | if (err < 0) |
494 | return err; | 494 | return err; |
495 | 495 | ||
diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h index 322438fb3ffc..d7f2923e6ebd 100644 --- a/net/sched/cls_rsvp.h +++ b/net/sched/cls_rsvp.h | |||
@@ -484,7 +484,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb, | |||
484 | if (opt == NULL) | 484 | if (opt == NULL) |
485 | return handle ? -EINVAL : 0; | 485 | return handle ? -EINVAL : 0; |
486 | 486 | ||
487 | err = nla_parse_nested(tb, TCA_RSVP_MAX, opt, rsvp_policy); | 487 | err = nla_parse_nested(tb, TCA_RSVP_MAX, opt, rsvp_policy, NULL); |
488 | if (err < 0) | 488 | if (err < 0) |
489 | return err; | 489 | return err; |
490 | 490 | ||
diff --git a/net/sched/cls_tcindex.c b/net/sched/cls_tcindex.c index 0751245a6ace..2ab001361457 100644 --- a/net/sched/cls_tcindex.c +++ b/net/sched/cls_tcindex.c | |||
@@ -482,7 +482,7 @@ tcindex_change(struct net *net, struct sk_buff *in_skb, | |||
482 | if (!opt) | 482 | if (!opt) |
483 | return 0; | 483 | return 0; |
484 | 484 | ||
485 | err = nla_parse_nested(tb, TCA_TCINDEX_MAX, opt, tcindex_policy); | 485 | err = nla_parse_nested(tb, TCA_TCINDEX_MAX, opt, tcindex_policy, NULL); |
486 | if (err < 0) | 486 | if (err < 0) |
487 | return err; | 487 | return err; |
488 | 488 | ||
diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 4dbe0c680fe6..9e2f330ac80f 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c | |||
@@ -860,7 +860,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, | |||
860 | if (opt == NULL) | 860 | if (opt == NULL) |
861 | return handle ? -EINVAL : 0; | 861 | return handle ? -EINVAL : 0; |
862 | 862 | ||
863 | err = nla_parse_nested(tb, TCA_U32_MAX, opt, u32_policy); | 863 | err = nla_parse_nested(tb, TCA_U32_MAX, opt, u32_policy, NULL); |
864 | if (err < 0) | 864 | if (err < 0) |
865 | return err; | 865 | return err; |
866 | 866 | ||
diff --git a/net/sched/em_meta.c b/net/sched/em_meta.c index ae7e4f5b348b..eb0e9bab54c1 100644 --- a/net/sched/em_meta.c +++ b/net/sched/em_meta.c | |||
@@ -912,7 +912,7 @@ static int em_meta_change(struct net *net, void *data, int len, | |||
912 | struct tcf_meta_hdr *hdr; | 912 | struct tcf_meta_hdr *hdr; |
913 | struct meta_match *meta = NULL; | 913 | struct meta_match *meta = NULL; |
914 | 914 | ||
915 | err = nla_parse(tb, TCA_EM_META_MAX, data, len, meta_policy); | 915 | err = nla_parse(tb, TCA_EM_META_MAX, data, len, meta_policy, NULL); |
916 | if (err < 0) | 916 | if (err < 0) |
917 | goto errout; | 917 | goto errout; |
918 | 918 | ||
diff --git a/net/sched/ematch.c b/net/sched/ematch.c index fbb7ebfc58c6..03b677bc0700 100644 --- a/net/sched/ematch.c +++ b/net/sched/ematch.c | |||
@@ -314,7 +314,7 @@ int tcf_em_tree_validate(struct tcf_proto *tp, struct nlattr *nla, | |||
314 | if (!nla) | 314 | if (!nla) |
315 | return 0; | 315 | return 0; |
316 | 316 | ||
317 | err = nla_parse_nested(tb, TCA_EMATCH_TREE_MAX, nla, em_policy); | 317 | err = nla_parse_nested(tb, TCA_EMATCH_TREE_MAX, nla, em_policy, NULL); |
318 | if (err < 0) | 318 | if (err < 0) |
319 | goto errout; | 319 | goto errout; |
320 | 320 | ||
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c index 62567bfe52c7..fcb5ae581c04 100644 --- a/net/sched/sch_api.c +++ b/net/sched/sch_api.c | |||
@@ -457,7 +457,7 @@ static struct qdisc_size_table *qdisc_get_stab(struct nlattr *opt) | |||
457 | u16 *tab = NULL; | 457 | u16 *tab = NULL; |
458 | int err; | 458 | int err; |
459 | 459 | ||
460 | err = nla_parse_nested(tb, TCA_STAB_MAX, opt, stab_policy); | 460 | err = nla_parse_nested(tb, TCA_STAB_MAX, opt, stab_policy, NULL); |
461 | if (err < 0) | 461 | if (err < 0) |
462 | return ERR_PTR(err); | 462 | return ERR_PTR(err); |
463 | if (!tb[TCA_STAB_BASE]) | 463 | if (!tb[TCA_STAB_BASE]) |
@@ -1131,7 +1131,7 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n) | |||
1131 | !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) | 1131 | !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) |
1132 | return -EPERM; | 1132 | return -EPERM; |
1133 | 1133 | ||
1134 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); | 1134 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); |
1135 | if (err < 0) | 1135 | if (err < 0) |
1136 | return err; | 1136 | return err; |
1137 | 1137 | ||
@@ -1200,7 +1200,7 @@ static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n) | |||
1200 | 1200 | ||
1201 | replay: | 1201 | replay: |
1202 | /* Reinit, just in case something touches this. */ | 1202 | /* Reinit, just in case something touches this. */ |
1203 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); | 1203 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); |
1204 | if (err < 0) | 1204 | if (err < 0) |
1205 | return err; | 1205 | return err; |
1206 | 1206 | ||
@@ -1515,7 +1515,7 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb) | |||
1515 | idx = 0; | 1515 | idx = 0; |
1516 | ASSERT_RTNL(); | 1516 | ASSERT_RTNL(); |
1517 | 1517 | ||
1518 | err = nlmsg_parse(nlh, sizeof(*tcm), tca, TCA_MAX, NULL); | 1518 | err = nlmsg_parse(nlh, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); |
1519 | if (err < 0) | 1519 | if (err < 0) |
1520 | return err; | 1520 | return err; |
1521 | 1521 | ||
@@ -1577,7 +1577,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n) | |||
1577 | !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) | 1577 | !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN)) |
1578 | return -EPERM; | 1578 | return -EPERM; |
1579 | 1579 | ||
1580 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL); | 1580 | err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL); |
1581 | if (err < 0) | 1581 | if (err < 0) |
1582 | return err; | 1582 | return err; |
1583 | 1583 | ||
diff --git a/net/sched/sch_atm.c b/net/sched/sch_atm.c index 2209c2ddacbf..40cbceed4de8 100644 --- a/net/sched/sch_atm.c +++ b/net/sched/sch_atm.c | |||
@@ -214,7 +214,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent, | |||
214 | if (opt == NULL) | 214 | if (opt == NULL) |
215 | return -EINVAL; | 215 | return -EINVAL; |
216 | 216 | ||
217 | error = nla_parse_nested(tb, TCA_ATM_MAX, opt, atm_policy); | 217 | error = nla_parse_nested(tb, TCA_ATM_MAX, opt, atm_policy, NULL); |
218 | if (error < 0) | 218 | if (error < 0) |
219 | return error; | 219 | return error; |
220 | 220 | ||
diff --git a/net/sched/sch_cbq.c b/net/sched/sch_cbq.c index cf93e5ff3d63..7415859fd4c3 100644 --- a/net/sched/sch_cbq.c +++ b/net/sched/sch_cbq.c | |||
@@ -1137,7 +1137,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt) | |||
1137 | struct tc_ratespec *r; | 1137 | struct tc_ratespec *r; |
1138 | int err; | 1138 | int err; |
1139 | 1139 | ||
1140 | err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy); | 1140 | err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, NULL); |
1141 | if (err < 0) | 1141 | if (err < 0) |
1142 | return err; | 1142 | return err; |
1143 | 1143 | ||
@@ -1474,7 +1474,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t | |||
1474 | if (opt == NULL) | 1474 | if (opt == NULL) |
1475 | return -EINVAL; | 1475 | return -EINVAL; |
1476 | 1476 | ||
1477 | err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy); | 1477 | err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, NULL); |
1478 | if (err < 0) | 1478 | if (err < 0) |
1479 | return err; | 1479 | return err; |
1480 | 1480 | ||
diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c index 593183a5b5b5..d00f4c7c2f3a 100644 --- a/net/sched/sch_choke.c +++ b/net/sched/sch_choke.c | |||
@@ -357,7 +357,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt) | |||
357 | if (opt == NULL) | 357 | if (opt == NULL) |
358 | return -EINVAL; | 358 | return -EINVAL; |
359 | 359 | ||
360 | err = nla_parse_nested(tb, TCA_CHOKE_MAX, opt, choke_policy); | 360 | err = nla_parse_nested(tb, TCA_CHOKE_MAX, opt, choke_policy, NULL); |
361 | if (err < 0) | 361 | if (err < 0) |
362 | return err; | 362 | return err; |
363 | 363 | ||
diff --git a/net/sched/sch_codel.c b/net/sched/sch_codel.c index 5bfa79ee657c..c518a1efcb9d 100644 --- a/net/sched/sch_codel.c +++ b/net/sched/sch_codel.c | |||
@@ -140,7 +140,7 @@ static int codel_change(struct Qdisc *sch, struct nlattr *opt) | |||
140 | if (!opt) | 140 | if (!opt) |
141 | return -EINVAL; | 141 | return -EINVAL; |
142 | 142 | ||
143 | err = nla_parse_nested(tb, TCA_CODEL_MAX, opt, codel_policy); | 143 | err = nla_parse_nested(tb, TCA_CODEL_MAX, opt, codel_policy, NULL); |
144 | if (err < 0) | 144 | if (err < 0) |
145 | return err; | 145 | return err; |
146 | 146 | ||
diff --git a/net/sched/sch_drr.c b/net/sched/sch_drr.c index 9fe67e257dfa..58a8c32eab23 100644 --- a/net/sched/sch_drr.c +++ b/net/sched/sch_drr.c | |||
@@ -76,7 +76,7 @@ static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
76 | if (!opt) | 76 | if (!opt) |
77 | return -EINVAL; | 77 | return -EINVAL; |
78 | 78 | ||
79 | err = nla_parse_nested(tb, TCA_DRR_MAX, opt, drr_policy); | 79 | err = nla_parse_nested(tb, TCA_DRR_MAX, opt, drr_policy, NULL); |
80 | if (err < 0) | 80 | if (err < 0) |
81 | return err; | 81 | return err; |
82 | 82 | ||
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index cfa1f2cdbaf7..1c0f877f673a 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c | |||
@@ -129,7 +129,7 @@ static int dsmark_change(struct Qdisc *sch, u32 classid, u32 parent, | |||
129 | if (!opt) | 129 | if (!opt) |
130 | goto errout; | 130 | goto errout; |
131 | 131 | ||
132 | err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy); | 132 | err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy, NULL); |
133 | if (err < 0) | 133 | if (err < 0) |
134 | goto errout; | 134 | goto errout; |
135 | 135 | ||
@@ -342,7 +342,7 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt) | |||
342 | if (!opt) | 342 | if (!opt) |
343 | goto errout; | 343 | goto errout; |
344 | 344 | ||
345 | err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy); | 345 | err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy, NULL); |
346 | if (err < 0) | 346 | if (err < 0) |
347 | goto errout; | 347 | goto errout; |
348 | 348 | ||
diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index a4f738ac7728..da4f67bda0ee 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c | |||
@@ -698,7 +698,7 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt) | |||
698 | if (!opt) | 698 | if (!opt) |
699 | return -EINVAL; | 699 | return -EINVAL; |
700 | 700 | ||
701 | err = nla_parse_nested(tb, TCA_FQ_MAX, opt, fq_policy); | 701 | err = nla_parse_nested(tb, TCA_FQ_MAX, opt, fq_policy, NULL); |
702 | if (err < 0) | 702 | if (err < 0) |
703 | return err; | 703 | return err; |
704 | 704 | ||
diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c index 097bbe9857a5..18bbb5476c83 100644 --- a/net/sched/sch_fq_codel.c +++ b/net/sched/sch_fq_codel.c | |||
@@ -383,7 +383,8 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt) | |||
383 | if (!opt) | 383 | if (!opt) |
384 | return -EINVAL; | 384 | return -EINVAL; |
385 | 385 | ||
386 | err = nla_parse_nested(tb, TCA_FQ_CODEL_MAX, opt, fq_codel_policy); | 386 | err = nla_parse_nested(tb, TCA_FQ_CODEL_MAX, opt, fq_codel_policy, |
387 | NULL); | ||
387 | if (err < 0) | 388 | if (err < 0) |
388 | return err; | 389 | return err; |
389 | if (tb[TCA_FQ_CODEL_FLOWS]) { | 390 | if (tb[TCA_FQ_CODEL_FLOWS]) { |
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c index c78a093c551a..17c7130454bd 100644 --- a/net/sched/sch_gred.c +++ b/net/sched/sch_gred.c | |||
@@ -401,7 +401,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt) | |||
401 | if (opt == NULL) | 401 | if (opt == NULL) |
402 | return -EINVAL; | 402 | return -EINVAL; |
403 | 403 | ||
404 | err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy); | 404 | err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy, NULL); |
405 | if (err < 0) | 405 | if (err < 0) |
406 | return err; | 406 | return err; |
407 | 407 | ||
@@ -470,7 +470,7 @@ static int gred_init(struct Qdisc *sch, struct nlattr *opt) | |||
470 | if (opt == NULL) | 470 | if (opt == NULL) |
471 | return -EINVAL; | 471 | return -EINVAL; |
472 | 472 | ||
473 | err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy); | 473 | err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy, NULL); |
474 | if (err < 0) | 474 | if (err < 0) |
475 | return err; | 475 | return err; |
476 | 476 | ||
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index 0198c6cdda49..5cb82f6c1b06 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c | |||
@@ -957,7 +957,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
957 | if (opt == NULL) | 957 | if (opt == NULL) |
958 | return -EINVAL; | 958 | return -EINVAL; |
959 | 959 | ||
960 | err = nla_parse_nested(tb, TCA_HFSC_MAX, opt, hfsc_policy); | 960 | err = nla_parse_nested(tb, TCA_HFSC_MAX, opt, hfsc_policy, NULL); |
961 | if (err < 0) | 961 | if (err < 0) |
962 | return err; | 962 | return err; |
963 | 963 | ||
diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c index 2fae8b5f1b80..c19d346e6c5a 100644 --- a/net/sched/sch_hhf.c +++ b/net/sched/sch_hhf.c | |||
@@ -529,7 +529,7 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt) | |||
529 | if (!opt) | 529 | if (!opt) |
530 | return -EINVAL; | 530 | return -EINVAL; |
531 | 531 | ||
532 | err = nla_parse_nested(tb, TCA_HHF_MAX, opt, hhf_policy); | 532 | err = nla_parse_nested(tb, TCA_HHF_MAX, opt, hhf_policy, NULL); |
533 | if (err < 0) | 533 | if (err < 0) |
534 | return err; | 534 | return err; |
535 | 535 | ||
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 95867033542e..570ef3b0c09b 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
@@ -1017,7 +1017,7 @@ static int htb_init(struct Qdisc *sch, struct nlattr *opt) | |||
1017 | if (!opt) | 1017 | if (!opt) |
1018 | return -EINVAL; | 1018 | return -EINVAL; |
1019 | 1019 | ||
1020 | err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy); | 1020 | err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy, NULL); |
1021 | if (err < 0) | 1021 | if (err < 0) |
1022 | return err; | 1022 | return err; |
1023 | 1023 | ||
@@ -1342,7 +1342,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
1342 | if (!opt) | 1342 | if (!opt) |
1343 | goto failure; | 1343 | goto failure; |
1344 | 1344 | ||
1345 | err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy); | 1345 | err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy, NULL); |
1346 | if (err < 0) | 1346 | if (err < 0) |
1347 | goto failure; | 1347 | goto failure; |
1348 | 1348 | ||
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index 94b4928ad413..f0ce4780f395 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c | |||
@@ -843,7 +843,7 @@ static int parse_attr(struct nlattr *tb[], int maxtype, struct nlattr *nla, | |||
843 | 843 | ||
844 | if (nested_len >= nla_attr_size(0)) | 844 | if (nested_len >= nla_attr_size(0)) |
845 | return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len), | 845 | return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len), |
846 | nested_len, policy); | 846 | nested_len, policy, NULL); |
847 | 847 | ||
848 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); | 848 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); |
849 | return 0; | 849 | return 0; |
diff --git a/net/sched/sch_pie.c b/net/sched/sch_pie.c index 5c3a99d6aa82..6c2791d6102d 100644 --- a/net/sched/sch_pie.c +++ b/net/sched/sch_pie.c | |||
@@ -190,7 +190,7 @@ static int pie_change(struct Qdisc *sch, struct nlattr *opt) | |||
190 | if (!opt) | 190 | if (!opt) |
191 | return -EINVAL; | 191 | return -EINVAL; |
192 | 192 | ||
193 | err = nla_parse_nested(tb, TCA_PIE_MAX, opt, pie_policy); | 193 | err = nla_parse_nested(tb, TCA_PIE_MAX, opt, pie_policy, NULL); |
194 | if (err < 0) | 194 | if (err < 0) |
195 | return err; | 195 | return err; |
196 | 196 | ||
diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c index 6c85f3e9239b..041eba3006cc 100644 --- a/net/sched/sch_qfq.c +++ b/net/sched/sch_qfq.c | |||
@@ -418,7 +418,8 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, | |||
418 | return -EINVAL; | 418 | return -EINVAL; |
419 | } | 419 | } |
420 | 420 | ||
421 | err = nla_parse_nested(tb, TCA_QFQ_MAX, tca[TCA_OPTIONS], qfq_policy); | 421 | err = nla_parse_nested(tb, TCA_QFQ_MAX, tca[TCA_OPTIONS], qfq_policy, |
422 | NULL); | ||
422 | if (err < 0) | 423 | if (err < 0) |
423 | return err; | 424 | return err; |
424 | 425 | ||
diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index 799ea6dd69b2..11292adce412 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c | |||
@@ -173,7 +173,7 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt) | |||
173 | if (opt == NULL) | 173 | if (opt == NULL) |
174 | return -EINVAL; | 174 | return -EINVAL; |
175 | 175 | ||
176 | err = nla_parse_nested(tb, TCA_RED_MAX, opt, red_policy); | 176 | err = nla_parse_nested(tb, TCA_RED_MAX, opt, red_policy, NULL); |
177 | if (err < 0) | 177 | if (err < 0) |
178 | return err; | 178 | return err; |
179 | 179 | ||
diff --git a/net/sched/sch_sfb.c b/net/sched/sch_sfb.c index ae862f172c94..0f777273ba29 100644 --- a/net/sched/sch_sfb.c +++ b/net/sched/sch_sfb.c | |||
@@ -495,7 +495,7 @@ static int sfb_change(struct Qdisc *sch, struct nlattr *opt) | |||
495 | int err; | 495 | int err; |
496 | 496 | ||
497 | if (opt) { | 497 | if (opt) { |
498 | err = nla_parse_nested(tb, TCA_SFB_MAX, opt, sfb_policy); | 498 | err = nla_parse_nested(tb, TCA_SFB_MAX, opt, sfb_policy, NULL); |
499 | if (err < 0) | 499 | if (err < 0) |
500 | return -EINVAL; | 500 | return -EINVAL; |
501 | 501 | ||
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c index 9850126129a3..b2e4b6ad241a 100644 --- a/net/sched/sch_tbf.c +++ b/net/sched/sch_tbf.c | |||
@@ -315,7 +315,7 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt) | |||
315 | s64 buffer, mtu; | 315 | s64 buffer, mtu; |
316 | u64 rate64 = 0, prate64 = 0; | 316 | u64 rate64 = 0, prate64 = 0; |
317 | 317 | ||
318 | err = nla_parse_nested(tb, TCA_TBF_MAX, opt, tbf_policy); | 318 | err = nla_parse_nested(tb, TCA_TBF_MAX, opt, tbf_policy, NULL); |
319 | if (err < 0) | 319 | if (err < 0) |
320 | return err; | 320 | return err; |
321 | 321 | ||
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c index 017801f9dbaa..8d40a7d31c99 100644 --- a/net/switchdev/switchdev.c +++ b/net/switchdev/switchdev.c | |||
@@ -826,7 +826,7 @@ static int switchdev_port_br_setlink_protinfo(struct net_device *dev, | |||
826 | int err; | 826 | int err; |
827 | 827 | ||
828 | err = nla_validate_nested(protinfo, IFLA_BRPORT_MAX, | 828 | err = nla_validate_nested(protinfo, IFLA_BRPORT_MAX, |
829 | switchdev_port_bridge_policy); | 829 | switchdev_port_bridge_policy, NULL); |
830 | if (err) | 830 | if (err) |
831 | return err; | 831 | return err; |
832 | 832 | ||
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 33a5bdfbef76..9b5c45f48f60 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c | |||
@@ -802,7 +802,7 @@ int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info) | |||
802 | 802 | ||
803 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, | 803 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, |
804 | info->attrs[TIPC_NLA_BEARER], | 804 | info->attrs[TIPC_NLA_BEARER], |
805 | tipc_nl_bearer_policy); | 805 | tipc_nl_bearer_policy, NULL); |
806 | if (err) | 806 | if (err) |
807 | return err; | 807 | return err; |
808 | 808 | ||
@@ -851,7 +851,7 @@ int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info) | |||
851 | 851 | ||
852 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, | 852 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, |
853 | info->attrs[TIPC_NLA_BEARER], | 853 | info->attrs[TIPC_NLA_BEARER], |
854 | tipc_nl_bearer_policy); | 854 | tipc_nl_bearer_policy, NULL); |
855 | if (err) | 855 | if (err) |
856 | return err; | 856 | return err; |
857 | 857 | ||
@@ -891,7 +891,7 @@ int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info) | |||
891 | 891 | ||
892 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, | 892 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, |
893 | info->attrs[TIPC_NLA_BEARER], | 893 | info->attrs[TIPC_NLA_BEARER], |
894 | tipc_nl_bearer_policy); | 894 | tipc_nl_bearer_policy, NULL); |
895 | if (err) | 895 | if (err) |
896 | return err; | 896 | return err; |
897 | 897 | ||
@@ -939,7 +939,7 @@ int tipc_nl_bearer_add(struct sk_buff *skb, struct genl_info *info) | |||
939 | 939 | ||
940 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, | 940 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, |
941 | info->attrs[TIPC_NLA_BEARER], | 941 | info->attrs[TIPC_NLA_BEARER], |
942 | tipc_nl_bearer_policy); | 942 | tipc_nl_bearer_policy, NULL); |
943 | if (err) | 943 | if (err) |
944 | return err; | 944 | return err; |
945 | 945 | ||
@@ -982,7 +982,7 @@ int tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info) | |||
982 | 982 | ||
983 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, | 983 | err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX, |
984 | info->attrs[TIPC_NLA_BEARER], | 984 | info->attrs[TIPC_NLA_BEARER], |
985 | tipc_nl_bearer_policy); | 985 | tipc_nl_bearer_policy, NULL); |
986 | if (err) | 986 | if (err) |
987 | return err; | 987 | return err; |
988 | 988 | ||
@@ -1104,7 +1104,7 @@ int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info) | |||
1104 | 1104 | ||
1105 | err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX, | 1105 | err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX, |
1106 | info->attrs[TIPC_NLA_MEDIA], | 1106 | info->attrs[TIPC_NLA_MEDIA], |
1107 | tipc_nl_media_policy); | 1107 | tipc_nl_media_policy, NULL); |
1108 | if (err) | 1108 | if (err) |
1109 | return err; | 1109 | return err; |
1110 | 1110 | ||
@@ -1152,7 +1152,7 @@ int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info) | |||
1152 | 1152 | ||
1153 | err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX, | 1153 | err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX, |
1154 | info->attrs[TIPC_NLA_MEDIA], | 1154 | info->attrs[TIPC_NLA_MEDIA], |
1155 | tipc_nl_media_policy); | 1155 | tipc_nl_media_policy, NULL); |
1156 | 1156 | ||
1157 | if (!attrs[TIPC_NLA_MEDIA_NAME]) | 1157 | if (!attrs[TIPC_NLA_MEDIA_NAME]) |
1158 | return -EINVAL; | 1158 | return -EINVAL; |
diff --git a/net/tipc/link.c b/net/tipc/link.c index ddd2dd6f77aa..60820dc35a08 100644 --- a/net/tipc/link.c +++ b/net/tipc/link.c | |||
@@ -1827,7 +1827,7 @@ int tipc_nl_parse_link_prop(struct nlattr *prop, struct nlattr *props[]) | |||
1827 | int err; | 1827 | int err; |
1828 | 1828 | ||
1829 | err = nla_parse_nested(props, TIPC_NLA_PROP_MAX, prop, | 1829 | err = nla_parse_nested(props, TIPC_NLA_PROP_MAX, prop, |
1830 | tipc_nl_prop_policy); | 1830 | tipc_nl_prop_policy, NULL); |
1831 | if (err) | 1831 | if (err) |
1832 | return err; | 1832 | return err; |
1833 | 1833 | ||
diff --git a/net/tipc/net.c b/net/tipc/net.c index ab8a2d5d1e32..836da66cd852 100644 --- a/net/tipc/net.c +++ b/net/tipc/net.c | |||
@@ -211,8 +211,8 @@ int tipc_nl_net_set(struct sk_buff *skb, struct genl_info *info) | |||
211 | return -EINVAL; | 211 | return -EINVAL; |
212 | 212 | ||
213 | err = nla_parse_nested(attrs, TIPC_NLA_NET_MAX, | 213 | err = nla_parse_nested(attrs, TIPC_NLA_NET_MAX, |
214 | info->attrs[TIPC_NLA_NET], | 214 | info->attrs[TIPC_NLA_NET], tipc_nl_net_policy, |
215 | tipc_nl_net_policy); | 215 | NULL); |
216 | if (err) | 216 | if (err) |
217 | return err; | 217 | return err; |
218 | 218 | ||
diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c index 26ca8dd64ded..b76f13f6fea1 100644 --- a/net/tipc/netlink.c +++ b/net/tipc/netlink.c | |||
@@ -268,7 +268,8 @@ int tipc_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr ***attr) | |||
268 | if (!*attr) | 268 | if (!*attr) |
269 | return -EOPNOTSUPP; | 269 | return -EOPNOTSUPP; |
270 | 270 | ||
271 | return nlmsg_parse(nlh, GENL_HDRLEN, *attr, maxattr, tipc_nl_policy); | 271 | return nlmsg_parse(nlh, GENL_HDRLEN, *attr, maxattr, tipc_nl_policy, |
272 | NULL); | ||
272 | } | 273 | } |
273 | 274 | ||
274 | int __init tipc_netlink_start(void) | 275 | int __init tipc_netlink_start(void) |
diff --git a/net/tipc/netlink_compat.c b/net/tipc/netlink_compat.c index e1ae8a8a2b8e..9bfe886ab330 100644 --- a/net/tipc/netlink_compat.c +++ b/net/tipc/netlink_compat.c | |||
@@ -296,7 +296,7 @@ static int __tipc_nl_compat_doit(struct tipc_nl_compat_cmd_doit *cmd, | |||
296 | 296 | ||
297 | err = nla_parse(attrbuf, tipc_genl_family.maxattr, | 297 | err = nla_parse(attrbuf, tipc_genl_family.maxattr, |
298 | (const struct nlattr *)trans_buf->data, | 298 | (const struct nlattr *)trans_buf->data, |
299 | trans_buf->len, NULL); | 299 | trans_buf->len, NULL, NULL); |
300 | if (err) | 300 | if (err) |
301 | goto parse_out; | 301 | goto parse_out; |
302 | 302 | ||
@@ -352,7 +352,7 @@ static int tipc_nl_compat_bearer_dump(struct tipc_nl_compat_msg *msg, | |||
352 | return -EINVAL; | 352 | return -EINVAL; |
353 | 353 | ||
354 | err = nla_parse_nested(bearer, TIPC_NLA_BEARER_MAX, | 354 | err = nla_parse_nested(bearer, TIPC_NLA_BEARER_MAX, |
355 | attrs[TIPC_NLA_BEARER], NULL); | 355 | attrs[TIPC_NLA_BEARER], NULL, NULL); |
356 | if (err) | 356 | if (err) |
357 | return err; | 357 | return err; |
358 | 358 | ||
@@ -472,7 +472,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg, | |||
472 | return -EINVAL; | 472 | return -EINVAL; |
473 | 473 | ||
474 | err = nla_parse_nested(link, TIPC_NLA_LINK_MAX, attrs[TIPC_NLA_LINK], | 474 | err = nla_parse_nested(link, TIPC_NLA_LINK_MAX, attrs[TIPC_NLA_LINK], |
475 | NULL); | 475 | NULL, NULL); |
476 | if (err) | 476 | if (err) |
477 | return err; | 477 | return err; |
478 | 478 | ||
@@ -480,7 +480,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg, | |||
480 | return -EINVAL; | 480 | return -EINVAL; |
481 | 481 | ||
482 | err = nla_parse_nested(prop, TIPC_NLA_PROP_MAX, | 482 | err = nla_parse_nested(prop, TIPC_NLA_PROP_MAX, |
483 | link[TIPC_NLA_LINK_PROP], NULL); | 483 | link[TIPC_NLA_LINK_PROP], NULL, NULL); |
484 | if (err) | 484 | if (err) |
485 | return err; | 485 | return err; |
486 | 486 | ||
@@ -488,7 +488,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg, | |||
488 | return -EINVAL; | 488 | return -EINVAL; |
489 | 489 | ||
490 | err = nla_parse_nested(stats, TIPC_NLA_STATS_MAX, | 490 | err = nla_parse_nested(stats, TIPC_NLA_STATS_MAX, |
491 | link[TIPC_NLA_LINK_STATS], NULL); | 491 | link[TIPC_NLA_LINK_STATS], NULL, NULL); |
492 | if (err) | 492 | if (err) |
493 | return err; | 493 | return err; |
494 | 494 | ||
@@ -598,7 +598,7 @@ static int tipc_nl_compat_link_dump(struct tipc_nl_compat_msg *msg, | |||
598 | return -EINVAL; | 598 | return -EINVAL; |
599 | 599 | ||
600 | err = nla_parse_nested(link, TIPC_NLA_LINK_MAX, attrs[TIPC_NLA_LINK], | 600 | err = nla_parse_nested(link, TIPC_NLA_LINK_MAX, attrs[TIPC_NLA_LINK], |
601 | NULL); | 601 | NULL, NULL); |
602 | if (err) | 602 | if (err) |
603 | return err; | 603 | return err; |
604 | 604 | ||
@@ -795,7 +795,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg, | |||
795 | return -EINVAL; | 795 | return -EINVAL; |
796 | 796 | ||
797 | err = nla_parse_nested(nt, TIPC_NLA_NAME_TABLE_MAX, | 797 | err = nla_parse_nested(nt, TIPC_NLA_NAME_TABLE_MAX, |
798 | attrs[TIPC_NLA_NAME_TABLE], NULL); | 798 | attrs[TIPC_NLA_NAME_TABLE], NULL, NULL); |
799 | if (err) | 799 | if (err) |
800 | return err; | 800 | return err; |
801 | 801 | ||
@@ -803,7 +803,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg, | |||
803 | return -EINVAL; | 803 | return -EINVAL; |
804 | 804 | ||
805 | err = nla_parse_nested(publ, TIPC_NLA_PUBL_MAX, | 805 | err = nla_parse_nested(publ, TIPC_NLA_PUBL_MAX, |
806 | nt[TIPC_NLA_NAME_TABLE_PUBL], NULL); | 806 | nt[TIPC_NLA_NAME_TABLE_PUBL], NULL, NULL); |
807 | if (err) | 807 | if (err) |
808 | return err; | 808 | return err; |
809 | 809 | ||
@@ -863,7 +863,7 @@ static int __tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg, | |||
863 | return -EINVAL; | 863 | return -EINVAL; |
864 | 864 | ||
865 | err = nla_parse_nested(publ, TIPC_NLA_PUBL_MAX, attrs[TIPC_NLA_PUBL], | 865 | err = nla_parse_nested(publ, TIPC_NLA_PUBL_MAX, attrs[TIPC_NLA_PUBL], |
866 | NULL); | 866 | NULL, NULL); |
867 | if (err) | 867 | if (err) |
868 | return err; | 868 | return err; |
869 | 869 | ||
@@ -929,7 +929,7 @@ static int tipc_nl_compat_sk_dump(struct tipc_nl_compat_msg *msg, | |||
929 | return -EINVAL; | 929 | return -EINVAL; |
930 | 930 | ||
931 | err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, attrs[TIPC_NLA_SOCK], | 931 | err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, attrs[TIPC_NLA_SOCK], |
932 | NULL); | 932 | NULL, NULL); |
933 | if (err) | 933 | if (err) |
934 | return err; | 934 | return err; |
935 | 935 | ||
@@ -940,8 +940,8 @@ static int tipc_nl_compat_sk_dump(struct tipc_nl_compat_msg *msg, | |||
940 | u32 node; | 940 | u32 node; |
941 | struct nlattr *con[TIPC_NLA_CON_MAX + 1]; | 941 | struct nlattr *con[TIPC_NLA_CON_MAX + 1]; |
942 | 942 | ||
943 | nla_parse_nested(con, TIPC_NLA_CON_MAX, sock[TIPC_NLA_SOCK_CON], | 943 | nla_parse_nested(con, TIPC_NLA_CON_MAX, |
944 | NULL); | 944 | sock[TIPC_NLA_SOCK_CON], NULL, NULL); |
945 | 945 | ||
946 | node = nla_get_u32(con[TIPC_NLA_CON_NODE]); | 946 | node = nla_get_u32(con[TIPC_NLA_CON_NODE]); |
947 | tipc_tlv_sprintf(msg->rep, " connected to <%u.%u.%u:%u>", | 947 | tipc_tlv_sprintf(msg->rep, " connected to <%u.%u.%u:%u>", |
@@ -977,8 +977,8 @@ static int tipc_nl_compat_media_dump(struct tipc_nl_compat_msg *msg, | |||
977 | if (!attrs[TIPC_NLA_MEDIA]) | 977 | if (!attrs[TIPC_NLA_MEDIA]) |
978 | return -EINVAL; | 978 | return -EINVAL; |
979 | 979 | ||
980 | err = nla_parse_nested(media, TIPC_NLA_MEDIA_MAX, attrs[TIPC_NLA_MEDIA], | 980 | err = nla_parse_nested(media, TIPC_NLA_MEDIA_MAX, |
981 | NULL); | 981 | attrs[TIPC_NLA_MEDIA], NULL, NULL); |
982 | if (err) | 982 | if (err) |
983 | return err; | 983 | return err; |
984 | 984 | ||
@@ -998,7 +998,7 @@ static int tipc_nl_compat_node_dump(struct tipc_nl_compat_msg *msg, | |||
998 | return -EINVAL; | 998 | return -EINVAL; |
999 | 999 | ||
1000 | err = nla_parse_nested(node, TIPC_NLA_NODE_MAX, attrs[TIPC_NLA_NODE], | 1000 | err = nla_parse_nested(node, TIPC_NLA_NODE_MAX, attrs[TIPC_NLA_NODE], |
1001 | NULL); | 1001 | NULL, NULL); |
1002 | if (err) | 1002 | if (err) |
1003 | return err; | 1003 | return err; |
1004 | 1004 | ||
@@ -1045,7 +1045,7 @@ static int tipc_nl_compat_net_dump(struct tipc_nl_compat_msg *msg, | |||
1045 | return -EINVAL; | 1045 | return -EINVAL; |
1046 | 1046 | ||
1047 | err = nla_parse_nested(net, TIPC_NLA_NET_MAX, attrs[TIPC_NLA_NET], | 1047 | err = nla_parse_nested(net, TIPC_NLA_NET_MAX, attrs[TIPC_NLA_NET], |
1048 | NULL); | 1048 | NULL, NULL); |
1049 | if (err) | 1049 | if (err) |
1050 | return err; | 1050 | return err; |
1051 | 1051 | ||
diff --git a/net/tipc/node.c b/net/tipc/node.c index 4512e83652b1..1dcde24c7053 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -1607,8 +1607,8 @@ int tipc_nl_peer_rm(struct sk_buff *skb, struct genl_info *info) | |||
1607 | return -EINVAL; | 1607 | return -EINVAL; |
1608 | 1608 | ||
1609 | err = nla_parse_nested(attrs, TIPC_NLA_NET_MAX, | 1609 | err = nla_parse_nested(attrs, TIPC_NLA_NET_MAX, |
1610 | info->attrs[TIPC_NLA_NET], | 1610 | info->attrs[TIPC_NLA_NET], tipc_nl_net_policy, |
1611 | tipc_nl_net_policy); | 1611 | NULL); |
1612 | if (err) | 1612 | if (err) |
1613 | return err; | 1613 | return err; |
1614 | 1614 | ||
@@ -1774,7 +1774,7 @@ int tipc_nl_node_set_link(struct sk_buff *skb, struct genl_info *info) | |||
1774 | 1774 | ||
1775 | err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX, | 1775 | err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX, |
1776 | info->attrs[TIPC_NLA_LINK], | 1776 | info->attrs[TIPC_NLA_LINK], |
1777 | tipc_nl_link_policy); | 1777 | tipc_nl_link_policy, NULL); |
1778 | if (err) | 1778 | if (err) |
1779 | return err; | 1779 | return err; |
1780 | 1780 | ||
@@ -1902,7 +1902,7 @@ int tipc_nl_node_reset_link_stats(struct sk_buff *skb, struct genl_info *info) | |||
1902 | 1902 | ||
1903 | err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX, | 1903 | err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX, |
1904 | info->attrs[TIPC_NLA_LINK], | 1904 | info->attrs[TIPC_NLA_LINK], |
1905 | tipc_nl_link_policy); | 1905 | tipc_nl_link_policy, NULL); |
1906 | if (err) | 1906 | if (err) |
1907 | return err; | 1907 | return err; |
1908 | 1908 | ||
@@ -2042,7 +2042,7 @@ int tipc_nl_node_set_monitor(struct sk_buff *skb, struct genl_info *info) | |||
2042 | 2042 | ||
2043 | err = nla_parse_nested(attrs, TIPC_NLA_MON_MAX, | 2043 | err = nla_parse_nested(attrs, TIPC_NLA_MON_MAX, |
2044 | info->attrs[TIPC_NLA_MON], | 2044 | info->attrs[TIPC_NLA_MON], |
2045 | tipc_nl_monitor_policy); | 2045 | tipc_nl_monitor_policy, NULL); |
2046 | if (err) | 2046 | if (err) |
2047 | return err; | 2047 | return err; |
2048 | 2048 | ||
@@ -2163,7 +2163,7 @@ int tipc_nl_node_dump_monitor_peer(struct sk_buff *skb, | |||
2163 | 2163 | ||
2164 | err = nla_parse_nested(mon, TIPC_NLA_MON_MAX, | 2164 | err = nla_parse_nested(mon, TIPC_NLA_MON_MAX, |
2165 | attrs[TIPC_NLA_MON], | 2165 | attrs[TIPC_NLA_MON], |
2166 | tipc_nl_monitor_policy); | 2166 | tipc_nl_monitor_policy, NULL); |
2167 | if (err) | 2167 | if (err) |
2168 | return err; | 2168 | return err; |
2169 | 2169 | ||
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 15f6ce7bf868..740100abeec3 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -2866,7 +2866,7 @@ int tipc_nl_publ_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
2866 | 2866 | ||
2867 | err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, | 2867 | err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, |
2868 | attrs[TIPC_NLA_SOCK], | 2868 | attrs[TIPC_NLA_SOCK], |
2869 | tipc_nl_sock_policy); | 2869 | tipc_nl_sock_policy, NULL); |
2870 | if (err) | 2870 | if (err) |
2871 | return err; | 2871 | return err; |
2872 | 2872 | ||
diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c index 46061cf48cd1..ecca64fc6a6f 100644 --- a/net/tipc/udp_media.c +++ b/net/tipc/udp_media.c | |||
@@ -457,7 +457,7 @@ int tipc_udp_nl_dump_remoteip(struct sk_buff *skb, struct netlink_callback *cb) | |||
457 | 457 | ||
458 | err = nla_parse_nested(battrs, TIPC_NLA_BEARER_MAX, | 458 | err = nla_parse_nested(battrs, TIPC_NLA_BEARER_MAX, |
459 | attrs[TIPC_NLA_BEARER], | 459 | attrs[TIPC_NLA_BEARER], |
460 | tipc_nl_bearer_policy); | 460 | tipc_nl_bearer_policy, NULL); |
461 | if (err) | 461 | if (err) |
462 | return err; | 462 | return err; |
463 | 463 | ||
@@ -609,7 +609,8 @@ int tipc_udp_nl_bearer_add(struct tipc_bearer *b, struct nlattr *attr) | |||
609 | struct nlattr *opts[TIPC_NLA_UDP_MAX + 1]; | 609 | struct nlattr *opts[TIPC_NLA_UDP_MAX + 1]; |
610 | struct udp_media_addr *dst; | 610 | struct udp_media_addr *dst; |
611 | 611 | ||
612 | if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX, attr, tipc_nl_udp_policy)) | 612 | if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX, attr, |
613 | tipc_nl_udp_policy, NULL)) | ||
613 | return -EINVAL; | 614 | return -EINVAL; |
614 | 615 | ||
615 | if (!opts[TIPC_NLA_UDP_REMOTE]) | 616 | if (!opts[TIPC_NLA_UDP_REMOTE]) |
@@ -662,7 +663,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b, | |||
662 | 663 | ||
663 | if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX, | 664 | if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX, |
664 | attrs[TIPC_NLA_BEARER_UDP_OPTS], | 665 | attrs[TIPC_NLA_BEARER_UDP_OPTS], |
665 | tipc_nl_udp_policy)) | 666 | tipc_nl_udp_policy, NULL)) |
666 | goto err; | 667 | goto err; |
667 | 668 | ||
668 | if (!opts[TIPC_NLA_UDP_LOCAL] || !opts[TIPC_NLA_UDP_REMOTE]) { | 669 | if (!opts[TIPC_NLA_UDP_LOCAL] || !opts[TIPC_NLA_UDP_REMOTE]) { |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 2312dc2ffdb9..e7594a3a0ab6 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -548,7 +548,7 @@ static int nl80211_prepare_wdev_dump(struct sk_buff *skb, | |||
548 | if (!cb->args[0]) { | 548 | if (!cb->args[0]) { |
549 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, | 549 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, |
550 | genl_family_attrbuf(&nl80211_fam), | 550 | genl_family_attrbuf(&nl80211_fam), |
551 | nl80211_fam.maxattr, nl80211_policy); | 551 | nl80211_fam.maxattr, nl80211_policy, NULL); |
552 | if (err) | 552 | if (err) |
553 | return err; | 553 | return err; |
554 | 554 | ||
@@ -719,7 +719,7 @@ static int nl80211_parse_key_new(struct nlattr *key, struct key_parse *k) | |||
719 | { | 719 | { |
720 | struct nlattr *tb[NL80211_KEY_MAX + 1]; | 720 | struct nlattr *tb[NL80211_KEY_MAX + 1]; |
721 | int err = nla_parse_nested(tb, NL80211_KEY_MAX, key, | 721 | int err = nla_parse_nested(tb, NL80211_KEY_MAX, key, |
722 | nl80211_key_policy); | 722 | nl80211_key_policy, NULL); |
723 | if (err) | 723 | if (err) |
724 | return err; | 724 | return err; |
725 | 725 | ||
@@ -760,7 +760,7 @@ static int nl80211_parse_key_new(struct nlattr *key, struct key_parse *k) | |||
760 | 760 | ||
761 | err = nla_parse_nested(kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1, | 761 | err = nla_parse_nested(kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1, |
762 | tb[NL80211_KEY_DEFAULT_TYPES], | 762 | tb[NL80211_KEY_DEFAULT_TYPES], |
763 | nl80211_key_default_policy); | 763 | nl80211_key_default_policy, NULL); |
764 | if (err) | 764 | if (err) |
765 | return err; | 765 | return err; |
766 | 766 | ||
@@ -807,10 +807,10 @@ static int nl80211_parse_key_old(struct genl_info *info, struct key_parse *k) | |||
807 | 807 | ||
808 | if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) { | 808 | if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) { |
809 | struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES]; | 809 | struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES]; |
810 | int err = nla_parse_nested( | 810 | int err = nla_parse_nested(kdt, |
811 | kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1, | 811 | NUM_NL80211_KEY_DEFAULT_TYPES - 1, |
812 | info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES], | 812 | info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES], |
813 | nl80211_key_default_policy); | 813 | nl80211_key_default_policy, NULL); |
814 | if (err) | 814 | if (err) |
815 | return err; | 815 | return err; |
816 | 816 | ||
@@ -1892,8 +1892,8 @@ static int nl80211_dump_wiphy_parse(struct sk_buff *skb, | |||
1892 | struct nl80211_dump_wiphy_state *state) | 1892 | struct nl80211_dump_wiphy_state *state) |
1893 | { | 1893 | { |
1894 | struct nlattr **tb = genl_family_attrbuf(&nl80211_fam); | 1894 | struct nlattr **tb = genl_family_attrbuf(&nl80211_fam); |
1895 | int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, | 1895 | int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, tb, |
1896 | tb, nl80211_fam.maxattr, nl80211_policy); | 1896 | nl80211_fam.maxattr, nl80211_policy, NULL); |
1897 | /* ignore parse errors for backward compatibility */ | 1897 | /* ignore parse errors for backward compatibility */ |
1898 | if (ret) | 1898 | if (ret) |
1899 | return 0; | 1899 | return 0; |
@@ -2308,7 +2308,7 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info) | |||
2308 | rem_txq_params) { | 2308 | rem_txq_params) { |
2309 | result = nla_parse_nested(tb, NL80211_TXQ_ATTR_MAX, | 2309 | result = nla_parse_nested(tb, NL80211_TXQ_ATTR_MAX, |
2310 | nl_txq_params, | 2310 | nl_txq_params, |
2311 | txq_params_policy); | 2311 | txq_params_policy, NULL); |
2312 | if (result) | 2312 | if (result) |
2313 | return result; | 2313 | return result; |
2314 | result = parse_txq_params(tb, &txq_params); | 2314 | result = parse_txq_params(tb, &txq_params); |
@@ -2695,8 +2695,8 @@ static int parse_monitor_flags(struct nlattr *nla, u32 *mntrflags) | |||
2695 | if (!nla) | 2695 | if (!nla) |
2696 | return -EINVAL; | 2696 | return -EINVAL; |
2697 | 2697 | ||
2698 | if (nla_parse_nested(flags, NL80211_MNTR_FLAG_MAX, | 2698 | if (nla_parse_nested(flags, NL80211_MNTR_FLAG_MAX, nla, |
2699 | nla, mntr_flags_policy)) | 2699 | mntr_flags_policy, NULL)) |
2700 | return -EINVAL; | 2700 | return -EINVAL; |
2701 | 2701 | ||
2702 | for (flag = 1; flag <= NL80211_MNTR_FLAG_MAX; flag++) | 2702 | for (flag = 1; flag <= NL80211_MNTR_FLAG_MAX; flag++) |
@@ -3561,7 +3561,7 @@ static int nl80211_parse_tx_bitrate_mask(struct genl_info *info, | |||
3561 | if (sband == NULL) | 3561 | if (sband == NULL) |
3562 | return -EINVAL; | 3562 | return -EINVAL; |
3563 | err = nla_parse_nested(tb, NL80211_TXRATE_MAX, tx_rates, | 3563 | err = nla_parse_nested(tb, NL80211_TXRATE_MAX, tx_rates, |
3564 | nl80211_txattr_policy); | 3564 | nl80211_txattr_policy, NULL); |
3565 | if (err) | 3565 | if (err) |
3566 | return err; | 3566 | return err; |
3567 | if (tb[NL80211_TXRATE_LEGACY]) { | 3567 | if (tb[NL80211_TXRATE_LEGACY]) { |
@@ -4100,8 +4100,8 @@ static int parse_station_flags(struct genl_info *info, | |||
4100 | if (!nla) | 4100 | if (!nla) |
4101 | return 0; | 4101 | return 0; |
4102 | 4102 | ||
4103 | if (nla_parse_nested(flags, NL80211_STA_FLAG_MAX, | 4103 | if (nla_parse_nested(flags, NL80211_STA_FLAG_MAX, nla, |
4104 | nla, sta_flags_policy)) | 4104 | sta_flags_policy, NULL)) |
4105 | return -EINVAL; | 4105 | return -EINVAL; |
4106 | 4106 | ||
4107 | /* | 4107 | /* |
@@ -4728,7 +4728,7 @@ static int nl80211_parse_sta_wme(struct genl_info *info, | |||
4728 | 4728 | ||
4729 | nla = info->attrs[NL80211_ATTR_STA_WME]; | 4729 | nla = info->attrs[NL80211_ATTR_STA_WME]; |
4730 | err = nla_parse_nested(tb, NL80211_STA_WME_MAX, nla, | 4730 | err = nla_parse_nested(tb, NL80211_STA_WME_MAX, nla, |
4731 | nl80211_sta_wme_policy); | 4731 | nl80211_sta_wme_policy, NULL); |
4732 | if (err) | 4732 | if (err) |
4733 | return err; | 4733 | return err; |
4734 | 4734 | ||
@@ -5853,7 +5853,7 @@ do { \ | |||
5853 | return -EINVAL; | 5853 | return -EINVAL; |
5854 | if (nla_parse_nested(tb, NL80211_MESHCONF_ATTR_MAX, | 5854 | if (nla_parse_nested(tb, NL80211_MESHCONF_ATTR_MAX, |
5855 | info->attrs[NL80211_ATTR_MESH_CONFIG], | 5855 | info->attrs[NL80211_ATTR_MESH_CONFIG], |
5856 | nl80211_meshconf_params_policy)) | 5856 | nl80211_meshconf_params_policy, NULL)) |
5857 | return -EINVAL; | 5857 | return -EINVAL; |
5858 | 5858 | ||
5859 | /* This makes sure that there aren't more than 32 mesh config | 5859 | /* This makes sure that there aren't more than 32 mesh config |
@@ -6002,7 +6002,7 @@ static int nl80211_parse_mesh_setup(struct genl_info *info, | |||
6002 | return -EINVAL; | 6002 | return -EINVAL; |
6003 | if (nla_parse_nested(tb, NL80211_MESH_SETUP_ATTR_MAX, | 6003 | if (nla_parse_nested(tb, NL80211_MESH_SETUP_ATTR_MAX, |
6004 | info->attrs[NL80211_ATTR_MESH_SETUP], | 6004 | info->attrs[NL80211_ATTR_MESH_SETUP], |
6005 | nl80211_mesh_setup_params_policy)) | 6005 | nl80211_mesh_setup_params_policy, NULL)) |
6006 | return -EINVAL; | 6006 | return -EINVAL; |
6007 | 6007 | ||
6008 | if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC]) | 6008 | if (tb[NL80211_MESH_SETUP_ENABLE_VENDOR_SYNC]) |
@@ -6393,7 +6393,7 @@ static int nl80211_set_reg(struct sk_buff *skb, struct genl_info *info) | |||
6393 | nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES], | 6393 | nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES], |
6394 | rem_reg_rules) { | 6394 | rem_reg_rules) { |
6395 | r = nla_parse_nested(tb, NL80211_REG_RULE_ATTR_MAX, | 6395 | r = nla_parse_nested(tb, NL80211_REG_RULE_ATTR_MAX, |
6396 | nl_reg_rule, reg_rule_policy); | 6396 | nl_reg_rule, reg_rule_policy, NULL); |
6397 | if (r) | 6397 | if (r) |
6398 | goto bad_reg; | 6398 | goto bad_reg; |
6399 | r = parse_reg_rule(tb, &rd->reg_rules[rule_idx]); | 6399 | r = parse_reg_rule(tb, &rd->reg_rules[rule_idx]); |
@@ -6461,7 +6461,7 @@ static int parse_bss_select(struct nlattr *nla, struct wiphy *wiphy, | |||
6461 | return -EINVAL; | 6461 | return -EINVAL; |
6462 | 6462 | ||
6463 | err = nla_parse_nested(attr, NL80211_BSS_SELECT_ATTR_MAX, nest, | 6463 | err = nla_parse_nested(attr, NL80211_BSS_SELECT_ATTR_MAX, nest, |
6464 | nl80211_bss_select_policy); | 6464 | nl80211_bss_select_policy, NULL); |
6465 | if (err) | 6465 | if (err) |
6466 | return err; | 6466 | return err; |
6467 | 6467 | ||
@@ -6862,7 +6862,7 @@ nl80211_parse_sched_scan_plans(struct wiphy *wiphy, int n_plans, | |||
6862 | return -EINVAL; | 6862 | return -EINVAL; |
6863 | 6863 | ||
6864 | err = nla_parse_nested(plan, NL80211_SCHED_SCAN_PLAN_MAX, | 6864 | err = nla_parse_nested(plan, NL80211_SCHED_SCAN_PLAN_MAX, |
6865 | attr, nl80211_plan_policy); | 6865 | attr, nl80211_plan_policy, NULL); |
6866 | if (err) | 6866 | if (err) |
6867 | return err; | 6867 | return err; |
6868 | 6868 | ||
@@ -6953,7 +6953,8 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev, | |||
6953 | 6953 | ||
6954 | err = nla_parse_nested(tb, | 6954 | err = nla_parse_nested(tb, |
6955 | NL80211_SCHED_SCAN_MATCH_ATTR_MAX, | 6955 | NL80211_SCHED_SCAN_MATCH_ATTR_MAX, |
6956 | attr, nl80211_match_policy); | 6956 | attr, nl80211_match_policy, |
6957 | NULL); | ||
6957 | if (err) | 6958 | if (err) |
6958 | return ERR_PTR(err); | 6959 | return ERR_PTR(err); |
6959 | /* add other standalone attributes here */ | 6960 | /* add other standalone attributes here */ |
@@ -7132,7 +7133,8 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev, | |||
7132 | 7133 | ||
7133 | err = nla_parse_nested(tb, | 7134 | err = nla_parse_nested(tb, |
7134 | NL80211_SCHED_SCAN_MATCH_ATTR_MAX, | 7135 | NL80211_SCHED_SCAN_MATCH_ATTR_MAX, |
7135 | attr, nl80211_match_policy); | 7136 | attr, nl80211_match_policy, |
7137 | NULL); | ||
7136 | if (err) | 7138 | if (err) |
7137 | goto out_free; | 7139 | goto out_free; |
7138 | ssid = tb[NL80211_SCHED_SCAN_MATCH_ATTR_SSID]; | 7140 | ssid = tb[NL80211_SCHED_SCAN_MATCH_ATTR_SSID]; |
@@ -7433,7 +7435,7 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info) | |||
7433 | 7435 | ||
7434 | err = nla_parse_nested(csa_attrs, NL80211_ATTR_MAX, | 7436 | err = nla_parse_nested(csa_attrs, NL80211_ATTR_MAX, |
7435 | info->attrs[NL80211_ATTR_CSA_IES], | 7437 | info->attrs[NL80211_ATTR_CSA_IES], |
7436 | nl80211_policy); | 7438 | nl80211_policy, NULL); |
7437 | if (err) | 7439 | if (err) |
7438 | return err; | 7440 | return err; |
7439 | 7441 | ||
@@ -8639,7 +8641,8 @@ static int nl80211_testmode_dump(struct sk_buff *skb, | |||
8639 | struct nlattr **attrbuf = genl_family_attrbuf(&nl80211_fam); | 8641 | struct nlattr **attrbuf = genl_family_attrbuf(&nl80211_fam); |
8640 | 8642 | ||
8641 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, | 8643 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, |
8642 | attrbuf, nl80211_fam.maxattr, nl80211_policy); | 8644 | attrbuf, nl80211_fam.maxattr, |
8645 | nl80211_policy, NULL); | ||
8643 | if (err) | 8646 | if (err) |
8644 | goto out_err; | 8647 | goto out_err; |
8645 | 8648 | ||
@@ -9530,7 +9533,7 @@ static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info) | |||
9530 | return -EINVAL; | 9533 | return -EINVAL; |
9531 | 9534 | ||
9532 | err = nla_parse_nested(attrs, NL80211_ATTR_CQM_MAX, cqm, | 9535 | err = nla_parse_nested(attrs, NL80211_ATTR_CQM_MAX, cqm, |
9533 | nl80211_attr_cqm_policy); | 9536 | nl80211_attr_cqm_policy, NULL); |
9534 | if (err) | 9537 | if (err) |
9535 | return err; | 9538 | return err; |
9536 | 9539 | ||
@@ -9940,7 +9943,7 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev, | |||
9940 | return -EINVAL; | 9943 | return -EINVAL; |
9941 | 9944 | ||
9942 | err = nla_parse_nested(tb, MAX_NL80211_WOWLAN_TCP, attr, | 9945 | err = nla_parse_nested(tb, MAX_NL80211_WOWLAN_TCP, attr, |
9943 | nl80211_wowlan_tcp_policy); | 9946 | nl80211_wowlan_tcp_policy, NULL); |
9944 | if (err) | 9947 | if (err) |
9945 | return err; | 9948 | return err; |
9946 | 9949 | ||
@@ -10085,7 +10088,8 @@ static int nl80211_parse_wowlan_nd(struct cfg80211_registered_device *rdev, | |||
10085 | goto out; | 10088 | goto out; |
10086 | } | 10089 | } |
10087 | 10090 | ||
10088 | err = nla_parse_nested(tb, NL80211_ATTR_MAX, attr, nl80211_policy); | 10091 | err = nla_parse_nested(tb, NL80211_ATTR_MAX, attr, nl80211_policy, |
10092 | NULL); | ||
10089 | if (err) | 10093 | if (err) |
10090 | goto out; | 10094 | goto out; |
10091 | 10095 | ||
@@ -10122,7 +10126,7 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) | |||
10122 | 10126 | ||
10123 | err = nla_parse_nested(tb, MAX_NL80211_WOWLAN_TRIG, | 10127 | err = nla_parse_nested(tb, MAX_NL80211_WOWLAN_TRIG, |
10124 | info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS], | 10128 | info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS], |
10125 | nl80211_wowlan_policy); | 10129 | nl80211_wowlan_policy, NULL); |
10126 | if (err) | 10130 | if (err) |
10127 | return err; | 10131 | return err; |
10128 | 10132 | ||
@@ -10205,7 +10209,7 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info) | |||
10205 | u8 *mask_pat; | 10209 | u8 *mask_pat; |
10206 | 10210 | ||
10207 | nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, | 10211 | nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, |
10208 | NULL); | 10212 | NULL, NULL); |
10209 | err = -EINVAL; | 10213 | err = -EINVAL; |
10210 | if (!pat_tb[NL80211_PKTPAT_MASK] || | 10214 | if (!pat_tb[NL80211_PKTPAT_MASK] || |
10211 | !pat_tb[NL80211_PKTPAT_PATTERN]) | 10215 | !pat_tb[NL80211_PKTPAT_PATTERN]) |
@@ -10416,7 +10420,7 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev, | |||
10416 | struct nlattr *pat_tb[NUM_NL80211_PKTPAT]; | 10420 | struct nlattr *pat_tb[NUM_NL80211_PKTPAT]; |
10417 | 10421 | ||
10418 | err = nla_parse_nested(tb, NL80211_ATTR_COALESCE_RULE_MAX, rule, | 10422 | err = nla_parse_nested(tb, NL80211_ATTR_COALESCE_RULE_MAX, rule, |
10419 | nl80211_coalesce_policy); | 10423 | nl80211_coalesce_policy, NULL); |
10420 | if (err) | 10424 | if (err) |
10421 | return err; | 10425 | return err; |
10422 | 10426 | ||
@@ -10454,7 +10458,7 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev, | |||
10454 | rem) { | 10458 | rem) { |
10455 | u8 *mask_pat; | 10459 | u8 *mask_pat; |
10456 | 10460 | ||
10457 | nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, NULL); | 10461 | nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, NULL, NULL); |
10458 | if (!pat_tb[NL80211_PKTPAT_MASK] || | 10462 | if (!pat_tb[NL80211_PKTPAT_MASK] || |
10459 | !pat_tb[NL80211_PKTPAT_PATTERN]) | 10463 | !pat_tb[NL80211_PKTPAT_PATTERN]) |
10460 | return -EINVAL; | 10464 | return -EINVAL; |
@@ -10575,7 +10579,7 @@ static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info) | |||
10575 | 10579 | ||
10576 | err = nla_parse_nested(tb, MAX_NL80211_REKEY_DATA, | 10580 | err = nla_parse_nested(tb, MAX_NL80211_REKEY_DATA, |
10577 | info->attrs[NL80211_ATTR_REKEY_DATA], | 10581 | info->attrs[NL80211_ATTR_REKEY_DATA], |
10578 | nl80211_rekey_policy); | 10582 | nl80211_rekey_policy, NULL); |
10579 | if (err) | 10583 | if (err) |
10580 | return err; | 10584 | return err; |
10581 | 10585 | ||
@@ -10892,7 +10896,7 @@ static int nl80211_nan_add_func(struct sk_buff *skb, | |||
10892 | 10896 | ||
10893 | err = nla_parse_nested(tb, NL80211_NAN_FUNC_ATTR_MAX, | 10897 | err = nla_parse_nested(tb, NL80211_NAN_FUNC_ATTR_MAX, |
10894 | info->attrs[NL80211_ATTR_NAN_FUNC], | 10898 | info->attrs[NL80211_ATTR_NAN_FUNC], |
10895 | nl80211_nan_func_policy); | 10899 | nl80211_nan_func_policy, NULL); |
10896 | if (err) | 10900 | if (err) |
10897 | return err; | 10901 | return err; |
10898 | 10902 | ||
@@ -10989,7 +10993,7 @@ static int nl80211_nan_add_func(struct sk_buff *skb, | |||
10989 | 10993 | ||
10990 | err = nla_parse_nested(srf_tb, NL80211_NAN_SRF_ATTR_MAX, | 10994 | err = nla_parse_nested(srf_tb, NL80211_NAN_SRF_ATTR_MAX, |
10991 | tb[NL80211_NAN_FUNC_SRF], | 10995 | tb[NL80211_NAN_FUNC_SRF], |
10992 | nl80211_nan_srf_policy); | 10996 | nl80211_nan_srf_policy, NULL); |
10993 | if (err) | 10997 | if (err) |
10994 | goto out; | 10998 | goto out; |
10995 | 10999 | ||
@@ -11524,8 +11528,8 @@ static int nl80211_prepare_vendor_dump(struct sk_buff *skb, | |||
11524 | return 0; | 11528 | return 0; |
11525 | } | 11529 | } |
11526 | 11530 | ||
11527 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, | 11531 | err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, attrbuf, |
11528 | attrbuf, nl80211_fam.maxattr, nl80211_policy); | 11532 | nl80211_fam.maxattr, nl80211_policy, NULL); |
11529 | if (err) | 11533 | if (err) |
11530 | return err; | 11534 | return err; |
11531 | 11535 | ||
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index e93d5c0471b2..804e99a3227c 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
@@ -932,8 +932,8 @@ static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb) | |||
932 | u8 proto = 0; | 932 | u8 proto = 0; |
933 | int err; | 933 | int err; |
934 | 934 | ||
935 | err = nlmsg_parse(cb->nlh, 0, attrs, XFRMA_MAX, | 935 | err = nlmsg_parse(cb->nlh, 0, attrs, XFRMA_MAX, xfrma_policy, |
936 | xfrma_policy); | 936 | NULL); |
937 | if (err < 0) | 937 | if (err < 0) |
938 | return err; | 938 | return err; |
939 | 939 | ||
@@ -2489,7 +2489,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, | |||
2489 | 2489 | ||
2490 | err = nlmsg_parse(nlh, xfrm_msg_min[type], attrs, | 2490 | err = nlmsg_parse(nlh, xfrm_msg_min[type], attrs, |
2491 | link->nla_max ? : XFRMA_MAX, | 2491 | link->nla_max ? : XFRMA_MAX, |
2492 | link->nla_pol ? : xfrma_policy); | 2492 | link->nla_pol ? : xfrma_policy, NULL); |
2493 | if (err < 0) | 2493 | if (err < 0) |
2494 | return err; | 2494 | return err; |
2495 | 2495 | ||