summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2017-04-12 08:34:07 -0400
committerDavid S. Miller <davem@davemloft.net>2017-04-13 13:58:22 -0400
commitfceb6435e85298f747fee938415057af837f5a8a (patch)
tree45bceaf19df703caa5e7ea839f7b35a7f9ebc332
parentba0dc5f6e0ba5a5d2f575bcdb35e5d1960cf7c04 (diff)
netlink: pass extended ACK struct to parsing functions
Pass the new extended ACK reporting struct to all of the generic netlink parsing functions. For now, pass NULL in almost all callers (except for some in the core.) Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--crypto/crypto_user.c2
-rw-r--r--drivers/block/drbd/drbd_nla.c2
-rw-r--r--drivers/infiniband/core/addr.c2
-rw-r--r--drivers/infiniband/core/iwpm_util.c6
-rw-r--r--drivers/infiniband/core/sa_query.c4
-rw-r--r--drivers/net/macsec.c10
-rw-r--r--drivers/net/team/team.c2
-rw-r--r--drivers/net/veth.c3
-rw-r--r--drivers/net/wireless/ath/ath10k/testmode.c4
-rw-r--r--drivers/net/wireless/ath/ath6kl/testmode.c4
-rw-r--r--drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c3
-rw-r--r--drivers/net/wireless/mac80211_hwsim.c4
-rw-r--r--drivers/net/wireless/marvell/mwifiex/cfg80211.c4
-rw-r--r--drivers/net/wireless/ti/wlcore/testmode.c3
-rw-r--r--drivers/net/wireless/ti/wlcore/vendor_cmd.c4
-rw-r--r--include/net/genetlink.h8
-rw-r--r--include/net/netlink.h33
-rw-r--r--include/net/rtnetlink.h3
-rw-r--r--lib/nlattr.c28
-rw-r--r--net/8021q/vlan_netlink.c3
-rw-r--r--net/bridge/br_mdb.c3
-rw-r--r--net/bridge/br_netlink.c4
-rw-r--r--net/bridge/br_netlink_tunnel.c4
-rw-r--r--net/can/gw.c2
-rw-r--r--net/core/fib_rules.c4
-rw-r--r--net/core/lwt_bpf.c5
-rw-r--r--net/core/neighbour.c8
-rw-r--r--net/core/net_namespace.c4
-rw-r--r--net/core/rtnetlink.c47
-rw-r--r--net/dcb/dcbnl.c57
-rw-r--r--net/decnet/dn_dev.c4
-rw-r--r--net/decnet/dn_fib.c6
-rw-r--r--net/decnet/dn_route.c2
-rw-r--r--net/ieee802154/nl802154.c29
-rw-r--r--net/ipv4/devinet.c12
-rw-r--r--net/ipv4/fib_frontend.c3
-rw-r--r--net/ipv4/ip_tunnel_core.c5
-rw-r--r--net/ipv4/ipmr.c3
-rw-r--r--net/ipv4/route.c3
-rw-r--r--net/ipv6/addrconf.c16
-rw-r--r--net/ipv6/addrlabel.c4
-rw-r--r--net/ipv6/ila/ila_lwt.c3
-rw-r--r--net/ipv6/route.c6
-rw-r--r--net/ipv6/seg6_iptunnel.c2
-rw-r--r--net/mpls/af_mpls.c5
-rw-r--r--net/mpls/mpls_iptunnel.c2
-rw-r--r--net/netfilter/ipset/ip_set_core.c27
-rw-r--r--net/netfilter/ipvs/ip_vs_ctl.c12
-rw-r--r--net/netfilter/nf_conntrack_netlink.c27
-rw-r--r--net/netfilter/nf_conntrack_proto_dccp.c2
-rw-r--r--net/netfilter/nf_conntrack_proto_sctp.c6
-rw-r--r--net/netfilter/nf_conntrack_proto_tcp.c3
-rw-r--r--net/netfilter/nf_nat_core.c5
-rw-r--r--net/netfilter/nf_tables_api.c27
-rw-r--r--net/netfilter/nfnetlink.c11
-rw-r--r--net/netfilter/nfnetlink_acct.c3
-rw-r--r--net/netfilter/nfnetlink_cthelper.c12
-rw-r--r--net/netfilter/nfnetlink_cttimeout.c3
-rw-r--r--net/netfilter/nfnetlink_queue.c2
-rw-r--r--net/netfilter/nft_compat.c2
-rw-r--r--net/netlabel/netlabel_cipso_v4.c19
-rw-r--r--net/netlink/genetlink.c2
-rw-r--r--net/nfc/netlink.c5
-rw-r--r--net/openvswitch/datapath.c2
-rw-r--r--net/openvswitch/flow_netlink.c4
-rw-r--r--net/openvswitch/vport-vxlan.c3
-rw-r--r--net/phonet/pn_netlink.c6
-rw-r--r--net/qrtr/qrtr.c2
-rw-r--r--net/sched/act_api.c20
-rw-r--r--net/sched/act_bpf.c2
-rw-r--r--net/sched/act_connmark.c3
-rw-r--r--net/sched/act_csum.c2
-rw-r--r--net/sched/act_gact.c2
-rw-r--r--net/sched/act_ife.c4
-rw-r--r--net/sched/act_ipt.c2
-rw-r--r--net/sched/act_mirred.c2
-rw-r--r--net/sched/act_nat.c2
-rw-r--r--net/sched/act_pedit.c4
-rw-r--r--net/sched/act_police.c2
-rw-r--r--net/sched/act_sample.c2
-rw-r--r--net/sched/act_simple.c2
-rw-r--r--net/sched/act_skbedit.c2
-rw-r--r--net/sched/act_skbmod.c2
-rw-r--r--net/sched/act_tunnel_key.c3
-rw-r--r--net/sched/act_vlan.c2
-rw-r--r--net/sched/cls_api.c2
-rw-r--r--net/sched/cls_basic.c2
-rw-r--r--net/sched/cls_bpf.c3
-rw-r--r--net/sched/cls_cgroup.c2
-rw-r--r--net/sched/cls_flow.c2
-rw-r--r--net/sched/cls_flower.c3
-rw-r--r--net/sched/cls_fw.c2
-rw-r--r--net/sched/cls_matchall.c4
-rw-r--r--net/sched/cls_route.c2
-rw-r--r--net/sched/cls_rsvp.h2
-rw-r--r--net/sched/cls_tcindex.c2
-rw-r--r--net/sched/cls_u32.c2
-rw-r--r--net/sched/em_meta.c2
-rw-r--r--net/sched/ematch.c2
-rw-r--r--net/sched/sch_api.c10
-rw-r--r--net/sched/sch_atm.c2
-rw-r--r--net/sched/sch_cbq.c4
-rw-r--r--net/sched/sch_choke.c2
-rw-r--r--net/sched/sch_codel.c2
-rw-r--r--net/sched/sch_drr.c2
-rw-r--r--net/sched/sch_dsmark.c4
-rw-r--r--net/sched/sch_fq.c2
-rw-r--r--net/sched/sch_fq_codel.c3
-rw-r--r--net/sched/sch_gred.c4
-rw-r--r--net/sched/sch_hfsc.c2
-rw-r--r--net/sched/sch_hhf.c2
-rw-r--r--net/sched/sch_htb.c4
-rw-r--r--net/sched/sch_netem.c2
-rw-r--r--net/sched/sch_pie.c2
-rw-r--r--net/sched/sch_qfq.c3
-rw-r--r--net/sched/sch_red.c2
-rw-r--r--net/sched/sch_sfb.c2
-rw-r--r--net/sched/sch_tbf.c2
-rw-r--r--net/switchdev/switchdev.c2
-rw-r--r--net/tipc/bearer.c14
-rw-r--r--net/tipc/link.c2
-rw-r--r--net/tipc/net.c4
-rw-r--r--net/tipc/netlink.c3
-rw-r--r--net/tipc/netlink_compat.c32
-rw-r--r--net/tipc/node.c12
-rw-r--r--net/tipc/socket.c2
-rw-r--r--net/tipc/udp_media.c7
-rw-r--r--net/wireless/nl80211.c78
-rw-r--r--net/xfrm/xfrm_user.c6
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 */
178static inline int genlmsg_parse(const struct nlmsghdr *nlh, 179static 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
241int nla_validate(const struct nlattr *head, int len, int maxtype, 241int 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);
243int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, 244int 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);
245int nla_policy_len(const struct nla_policy *, int); 247int nla_policy_len(const struct nla_policy *, int);
246struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype); 248struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype);
247size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize); 249size_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 */
381static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen, 384static 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 */
414static inline int nlmsg_validate(const struct nlmsghdr *nlh, 419static 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 */
746static inline int nla_parse_nested(struct nlattr *tb[], int maxtype, 754static 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 */
1263static inline int nla_validate_nested(const struct nlattr *start, int maxtype, 1274static 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,
158int rtnl_delete_link(struct net_device *dev); 158int rtnl_delete_link(struct net_device *dev);
159int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm); 159int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm);
160 160
161int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len); 161int 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 */
122int nla_validate(const struct nlattr *head, int len, int maxtype, 123int 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;
135errout:
136 return err;
137} 141}
138EXPORT_SYMBOL(nla_validate); 142EXPORT_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 */
182int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head, 186int 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
41static int vlan_validate(struct nlattr *tb[], struct nlattr *data[]) 42static 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
1643int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len) 1644int 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}
1647EXPORT_SYMBOL(rtnl_nla_parse_ifla); 1649EXPORT_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
2442replay: 2445replay:
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
5257static int check_addr_gen_mode(int mode) 5261static 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) {
519metadata_parse_err: 519metadata_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)
229replay: 229replay:
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
1201replay: 1201replay:
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
274int __init tipc_netlink_start(void) 275int __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