summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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