netlink: pass extended ACK struct to parsing functions
authorJohannes Berg <johannes.berg@intel.com>
Wed, 12 Apr 2017 12:34:07 +0000 (14:34 +0200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 13 Apr 2017 17:58:22 +0000 (13:58 -0400)
Pass the new extended ACK reporting struct to all of the generic
netlink parsing functions. For now, pass NULL in almost all callers
(except for some in the core.)

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
129 files changed:
crypto/crypto_user.c
drivers/block/drbd/drbd_nla.c
drivers/infiniband/core/addr.c
drivers/infiniband/core/iwpm_util.c
drivers/infiniband/core/sa_query.c
drivers/net/macsec.c
drivers/net/team/team.c
drivers/net/veth.c
drivers/net/wireless/ath/ath10k/testmode.c
drivers/net/wireless/ath/ath6kl/testmode.c
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c
drivers/net/wireless/mac80211_hwsim.c
drivers/net/wireless/marvell/mwifiex/cfg80211.c
drivers/net/wireless/ti/wlcore/testmode.c
drivers/net/wireless/ti/wlcore/vendor_cmd.c
include/net/genetlink.h
include/net/netlink.h
include/net/rtnetlink.h
lib/nlattr.c
net/8021q/vlan_netlink.c
net/bridge/br_mdb.c
net/bridge/br_netlink.c
net/bridge/br_netlink_tunnel.c
net/can/gw.c
net/core/fib_rules.c
net/core/lwt_bpf.c
net/core/neighbour.c
net/core/net_namespace.c
net/core/rtnetlink.c
net/dcb/dcbnl.c
net/decnet/dn_dev.c
net/decnet/dn_fib.c
net/decnet/dn_route.c
net/ieee802154/nl802154.c
net/ipv4/devinet.c
net/ipv4/fib_frontend.c
net/ipv4/ip_tunnel_core.c
net/ipv4/ipmr.c
net/ipv4/route.c
net/ipv6/addrconf.c
net/ipv6/addrlabel.c
net/ipv6/ila/ila_lwt.c
net/ipv6/route.c
net/ipv6/seg6_iptunnel.c
net/mpls/af_mpls.c
net/mpls/mpls_iptunnel.c
net/netfilter/ipset/ip_set_core.c
net/netfilter/ipvs/ip_vs_ctl.c
net/netfilter/nf_conntrack_netlink.c
net/netfilter/nf_conntrack_proto_dccp.c
net/netfilter/nf_conntrack_proto_sctp.c
net/netfilter/nf_conntrack_proto_tcp.c
net/netfilter/nf_nat_core.c
net/netfilter/nf_tables_api.c
net/netfilter/nfnetlink.c
net/netfilter/nfnetlink_acct.c
net/netfilter/nfnetlink_cthelper.c
net/netfilter/nfnetlink_cttimeout.c
net/netfilter/nfnetlink_queue.c
net/netfilter/nft_compat.c
net/netlabel/netlabel_cipso_v4.c
net/netlink/genetlink.c
net/nfc/netlink.c
net/openvswitch/datapath.c
net/openvswitch/flow_netlink.c
net/openvswitch/vport-vxlan.c
net/phonet/pn_netlink.c
net/qrtr/qrtr.c
net/sched/act_api.c
net/sched/act_bpf.c
net/sched/act_connmark.c
net/sched/act_csum.c
net/sched/act_gact.c
net/sched/act_ife.c
net/sched/act_ipt.c
net/sched/act_mirred.c
net/sched/act_nat.c
net/sched/act_pedit.c
net/sched/act_police.c
net/sched/act_sample.c
net/sched/act_simple.c
net/sched/act_skbedit.c
net/sched/act_skbmod.c
net/sched/act_tunnel_key.c
net/sched/act_vlan.c
net/sched/cls_api.c
net/sched/cls_basic.c
net/sched/cls_bpf.c
net/sched/cls_cgroup.c
net/sched/cls_flow.c
net/sched/cls_flower.c
net/sched/cls_fw.c
net/sched/cls_matchall.c
net/sched/cls_route.c
net/sched/cls_rsvp.h
net/sched/cls_tcindex.c
net/sched/cls_u32.c
net/sched/em_meta.c
net/sched/ematch.c
net/sched/sch_api.c
net/sched/sch_atm.c
net/sched/sch_cbq.c
net/sched/sch_choke.c
net/sched/sch_codel.c
net/sched/sch_drr.c
net/sched/sch_dsmark.c
net/sched/sch_fq.c
net/sched/sch_fq_codel.c
net/sched/sch_gred.c
net/sched/sch_hfsc.c
net/sched/sch_hhf.c
net/sched/sch_htb.c
net/sched/sch_netem.c
net/sched/sch_pie.c
net/sched/sch_qfq.c
net/sched/sch_red.c
net/sched/sch_sfb.c
net/sched/sch_tbf.c
net/switchdev/switchdev.c
net/tipc/bearer.c
net/tipc/link.c
net/tipc/net.c
net/tipc/netlink.c
net/tipc/netlink_compat.c
net/tipc/node.c
net/tipc/socket.c
net/tipc/udp_media.c
net/wireless/nl80211.c
net/xfrm/xfrm_user.c

index 4a44830741c1162a939ceaf60c9ca5379c2d4f18..fc79906c1fe7f222cae838312706ed98c1500436 100644 (file)
@@ -523,7 +523,7 @@ static int crypto_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
        }
 
        err = nlmsg_parse(nlh, crypto_msg_min[type], attrs, CRYPTOCFGA_MAX,
-                         crypto_policy);
+                         crypto_policy, NULL);
        if (err < 0)
                return err;
 
index b2d4791498a660618aa6f603db35fd0c0b5a94e7..6bf806df60dc6008e6754b74dec4ff9a021ce8ae 100644 (file)
@@ -34,7 +34,7 @@ int drbd_nla_parse_nested(struct nlattr *tb[], int maxtype, struct nlattr *nla,
 
        err = drbd_nla_check_mandatory(maxtype, nla);
        if (!err)
-               err = nla_parse_nested(tb, maxtype, nla, policy);
+               err = nla_parse_nested(tb, maxtype, nla, policy, NULL);
 
        return err;
 }
index 0f58f46dbad7e0b4059cbab4ffca95623cad8bb9..329d08c884f66b3aa7647cf5b3266b4e053e7ebc 100644 (file)
@@ -88,7 +88,7 @@ static inline bool ib_nl_is_good_ip_resp(const struct nlmsghdr *nlh)
                return false;
 
        ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
-                       nlmsg_len(nlh), ib_nl_addr_policy);
+                       nlmsg_len(nlh), ib_nl_addr_policy, NULL);
        if (ret)
                return false;
 
index 3ef51a96bbf1128905c59688ad64d3fc2a34e035..f13870e69ccd869a1c0c25adad55cf98d895c524 100644 (file)
@@ -472,12 +472,14 @@ int iwpm_parse_nlmsg(struct netlink_callback *cb, int policy_max,
        int ret;
        const char *err_str = "";
 
-       ret = nlmsg_validate(cb->nlh, nlh_len, policy_max-1, nlmsg_policy);
+       ret = nlmsg_validate(cb->nlh, nlh_len, policy_max - 1, nlmsg_policy,
+                            NULL);
        if (ret) {
                err_str = "Invalid attribute";
                goto parse_nlmsg_error;
        }
-       ret = nlmsg_parse(cb->nlh, nlh_len, nltb, policy_max-1, nlmsg_policy);
+       ret = nlmsg_parse(cb->nlh, nlh_len, nltb, policy_max - 1,
+                         nlmsg_policy, NULL);
        if (ret) {
                err_str = "Unable to parse the nlmsg";
                goto parse_nlmsg_error;
index 81b742ca163911f3cfe6ffc42ea624931e7f3089..ceae153997d0796995d680b7fdd289dc35871352 100644 (file)
@@ -808,7 +808,7 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb,
                return -EPERM;
 
        ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
-                       nlmsg_len(nlh), ib_nl_policy);
+                       nlmsg_len(nlh), ib_nl_policy, NULL);
        attr = (const struct nlattr *)tb[LS_NLA_TYPE_TIMEOUT];
        if (ret || !attr)
                goto settimeout_out;
@@ -860,7 +860,7 @@ static inline int ib_nl_is_good_resolve_resp(const struct nlmsghdr *nlh)
                return 0;
 
        ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
-                       nlmsg_len(nlh), ib_nl_policy);
+                       nlmsg_len(nlh), ib_nl_policy, NULL);
        if (ret)
                return 0;
 
index ff0a5ed3ca803551a0350303af44976d0f47dcfc..9eb7a69be92a39bb3af96a1827740dd937cb82a6 100644 (file)
@@ -1590,8 +1590,9 @@ static int parse_sa_config(struct nlattr **attrs, struct nlattr **tb_sa)
        if (!attrs[MACSEC_ATTR_SA_CONFIG])
                return -EINVAL;
 
-       if (nla_parse_nested(tb_sa, MACSEC_SA_ATTR_MAX, attrs[MACSEC_ATTR_SA_CONFIG],
-                            macsec_genl_sa_policy))
+       if (nla_parse_nested(tb_sa, MACSEC_SA_ATTR_MAX,
+                            attrs[MACSEC_ATTR_SA_CONFIG],
+                            macsec_genl_sa_policy, NULL))
                return -EINVAL;
 
        return 0;
@@ -1602,8 +1603,9 @@ static int parse_rxsc_config(struct nlattr **attrs, struct nlattr **tb_rxsc)
        if (!attrs[MACSEC_ATTR_RXSC_CONFIG])
                return -EINVAL;
 
-       if (nla_parse_nested(tb_rxsc, MACSEC_RXSC_ATTR_MAX, attrs[MACSEC_ATTR_RXSC_CONFIG],
-                            macsec_genl_rxsc_policy))
+       if (nla_parse_nested(tb_rxsc, MACSEC_RXSC_ATTR_MAX,
+                            attrs[MACSEC_ATTR_RXSC_CONFIG],
+                            macsec_genl_rxsc_policy, NULL))
                return -EINVAL;
 
        return 0;
index 1b52520715aec6f972626361a6aa93accf809301..86f227124ba1088461b38443c885f4377bcfc1a1 100644 (file)
@@ -2471,7 +2471,7 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info)
                        goto team_put;
                }
                err = nla_parse_nested(opt_attrs, TEAM_ATTR_OPTION_MAX,
-                                      nl_option, team_nl_option_policy);
+                                      nl_option, team_nl_option_policy, NULL);
                if (err)
                        goto team_put;
                if (!opt_attrs[TEAM_ATTR_OPTION_NAME] ||
index 317103680675f97eb056e650d5adc07fe51f67e2..38f0f03a29c8898131110a620e73da4776cb7020 100644 (file)
@@ -368,7 +368,8 @@ static int veth_newlink(struct net *src_net, struct net_device *dev,
                ifmp = nla_data(nla_peer);
                err = rtnl_nla_parse_ifla(peer_tb,
                                          nla_data(nla_peer) + sizeof(struct ifinfomsg),
-                                         nla_len(nla_peer) - sizeof(struct ifinfomsg));
+                                         nla_len(nla_peer) - sizeof(struct ifinfomsg),
+                                         NULL);
                if (err < 0)
                        return err;
 
index 8bb36c18a7491a6d51e75dfaeb3bf0f1d12ff37e..d8564624415c9f23a8fb21ea6efda6b9fc5c6fd1 100644 (file)
@@ -420,8 +420,8 @@ int ath10k_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        struct nlattr *tb[ATH10K_TM_ATTR_MAX + 1];
        int ret;
 
-       ret = nla_parse(tb, ATH10K_TM_ATTR_MAX, data, len,
-                       ath10k_tm_policy);
+       ret = nla_parse(tb, ATH10K_TM_ATTR_MAX, data, len, ath10k_tm_policy,
+                       NULL);
        if (ret)
                return ret;
 
index d67170ea1038a1d35f3acc56261e68ed2051cad4..d8dcacda9add2b23e5f38bc66263190fe4ba4be1 100644 (file)
@@ -74,8 +74,8 @@ int ath6kl_tm_cmd(struct wiphy *wiphy, struct wireless_dev *wdev,
        int err, buf_len;
        void *buf;
 
-       err = nla_parse(tb, ATH6KL_TM_ATTR_MAX, data, len,
-                       ath6kl_tm_policy);
+       err = nla_parse(tb, ATH6KL_TM_ATTR_MAX, data, len, ath6kl_tm_policy,
+                       NULL);
        if (err)
                return err;
 
index 486dcceed17a4f3a5b1ff0084d8a1f6b768199cd..841bfdff8750f3fdd6370fd1c33f2e1d1b91de0a 100644 (file)
@@ -3711,7 +3711,8 @@ static int __iwl_mvm_mac_testmode_cmd(struct iwl_mvm *mvm,
        int err;
        u32 noa_duration;
 
-       err = nla_parse(tb, IWL_MVM_TM_ATTR_MAX, data, len, iwl_mvm_tm_policy);
+       err = nla_parse(tb, IWL_MVM_TM_ATTR_MAX, data, len, iwl_mvm_tm_policy,
+                       NULL);
        if (err)
                return err;
 
index 50c219fb1a52b9799d502470c6a5bea08ba7174a..84a0e242ffdb364d697bff7351a8adc69d7b9a3a 100644 (file)
@@ -389,7 +389,7 @@ static int mac80211_hwsim_vendor_cmd_test(struct wiphy *wiphy,
        u32 val;
 
        err = nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data, data_len,
-                       hwsim_vendor_test_policy);
+                       hwsim_vendor_test_policy, NULL);
        if (err)
                return err;
        if (!tb[QCA_WLAN_VENDOR_ATTR_TEST])
@@ -1852,7 +1852,7 @@ static int mac80211_hwsim_testmode_cmd(struct ieee80211_hw *hw,
        int err, ps;
 
        err = nla_parse(tb, HWSIM_TM_ATTR_MAX, data, len,
-                       hwsim_testmode_policy);
+                       hwsim_testmode_policy, NULL);
        if (err)
                return err;
 
index 44d06177859e75a680c7f100b4c5de47fae89940..252e802df8fe06c686d114f2b2f124bd593f71e7 100644 (file)
@@ -4016,8 +4016,8 @@ static int mwifiex_tm_cmd(struct wiphy *wiphy, struct wireless_dev *wdev,
        if (!priv)
                return -EINVAL;
 
-       err = nla_parse(tb, MWIFIEX_TM_ATTR_MAX, data, len,
-                       mwifiex_tm_policy);
+       err = nla_parse(tb, MWIFIEX_TM_ATTR_MAX, data, len, mwifiex_tm_policy,
+                       NULL);
        if (err)
                return err;
 
index ddad58f614da4fa862a0e3f2b776fe0e994a742d..009ec07c4cec14f057b39fe122aa3a6acb943eb8 100644 (file)
@@ -366,7 +366,8 @@ int wl1271_tm_cmd(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
        u32 nla_cmd;
        int err;
 
-       err = nla_parse(tb, WL1271_TM_ATTR_MAX, data, len, wl1271_tm_policy);
+       err = nla_parse(tb, WL1271_TM_ATTR_MAX, data, len, wl1271_tm_policy,
+                       NULL);
        if (err)
                return err;
 
index fd4e9ba176c9b1ab3f16878f95d6041f12e39903..5c0bcb1fe1a1f2e2468d629afe951cc4826e3719 100644 (file)
@@ -41,7 +41,7 @@ wlcore_vendor_cmd_smart_config_start(struct wiphy *wiphy,
                return -EINVAL;
 
        ret = nla_parse(tb, MAX_WLCORE_VENDOR_ATTR, data, data_len,
-                       wlcore_vendor_attr_policy);
+                       wlcore_vendor_attr_policy, NULL);
        if (ret)
                return ret;
 
@@ -116,7 +116,7 @@ wlcore_vendor_cmd_smart_config_set_group_key(struct wiphy *wiphy,
                return -EINVAL;
 
        ret = nla_parse(tb, MAX_WLCORE_VENDOR_ATTR, data, data_len,
-                       wlcore_vendor_attr_policy);
+                       wlcore_vendor_attr_policy, NULL);
        if (ret)
                return ret;
 
index f18db6570f52f4771164de6564788d856f169842..68b88192b00c6200aa0b8b2628554952d0d79a1c 100644 (file)
@@ -174,14 +174,16 @@ genlmsg_nlhdr(void *user_hdr, const struct genl_family *family)
  * @tb: destination array with maxtype+1 elements
  * @maxtype: maximum attribute type to be expected
  * @policy: validation policy
- * */
+ * @extack: extended ACK report struct
+ */
 static inline int genlmsg_parse(const struct nlmsghdr *nlh,
                                const struct genl_family *family,
                                struct nlattr *tb[], int maxtype,
-                               const struct nla_policy *policy)
+                               const struct nla_policy *policy,
+                               struct netlink_ext_ack *extack)
 {
        return nlmsg_parse(nlh, family->hdrsize + GENL_HDRLEN, tb, maxtype,
-                          policy);
+                          policy, extack);
 }
 
 /**
index a064ec3e2ee19c759c0c58f7ff837ede9bd4a531..01709172b3d38455e7e5510228d6b4a0ad6e94a6 100644 (file)
@@ -239,9 +239,11 @@ int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 portid,
                 unsigned int group, int report, gfp_t flags);
 
 int nla_validate(const struct nlattr *head, int len, int maxtype,
-                const struct nla_policy *policy);
+                const struct nla_policy *policy,
+                struct netlink_ext_ack *extack);
 int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
-             int len, const struct nla_policy *policy);
+             int len, const struct nla_policy *policy,
+             struct netlink_ext_ack *extack);
 int nla_policy_len(const struct nla_policy *, int);
 struct nlattr *nla_find(const struct nlattr *head, int len, int attrtype);
 size_t nla_strlcpy(char *dst, const struct nlattr *nla, size_t dstsize);
@@ -375,18 +377,20 @@ nlmsg_next(const struct nlmsghdr *nlh, int *remaining)
  * @tb: destination array with maxtype+1 elements
  * @maxtype: maximum attribute type to be expected
  * @policy: validation policy
+ * @extack: extended ACK report struct
  *
  * See nla_parse()
  */
 static inline int nlmsg_parse(const struct nlmsghdr *nlh, int hdrlen,
                              struct nlattr *tb[], int maxtype,
-                             const struct nla_policy *policy)
+                             const struct nla_policy *policy,
+                             struct netlink_ext_ack *extack)
 {
        if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
                return -EINVAL;
 
        return nla_parse(tb, maxtype, nlmsg_attrdata(nlh, hdrlen),
-                        nlmsg_attrlen(nlh, hdrlen), policy);
+                        nlmsg_attrlen(nlh, hdrlen), policy, extack);
 }
 
 /**
@@ -410,16 +414,19 @@ static inline struct nlattr *nlmsg_find_attr(const struct nlmsghdr *nlh,
  * @hdrlen: length of familiy specific header
  * @maxtype: maximum attribute type to be expected
  * @policy: validation policy
+ * @extack: extended ACK report struct
  */
 static inline int nlmsg_validate(const struct nlmsghdr *nlh,
                                 int hdrlen, int maxtype,
-                                const struct nla_policy *policy)
+                                const struct nla_policy *policy,
+                                struct netlink_ext_ack *extack)
 {
        if (nlh->nlmsg_len < nlmsg_msg_size(hdrlen))
                return -EINVAL;
 
        return nla_validate(nlmsg_attrdata(nlh, hdrlen),
-                           nlmsg_attrlen(nlh, hdrlen), maxtype, policy);
+                           nlmsg_attrlen(nlh, hdrlen), maxtype, policy,
+                           extack);
 }
 
 /**
@@ -740,14 +747,17 @@ nla_find_nested(const struct nlattr *nla, int attrtype)
  * @maxtype: maximum attribute type to be expected
  * @nla: attribute containing the nested attributes
  * @policy: validation policy
+ * @extack: extended ACK report struct
  *
  * See nla_parse()
  */
 static inline int nla_parse_nested(struct nlattr *tb[], int maxtype,
                                   const struct nlattr *nla,
-                                  const struct nla_policy *policy)
+                                  const struct nla_policy *policy,
+                                  struct netlink_ext_ack *extack)
 {
-       return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy);
+       return nla_parse(tb, maxtype, nla_data(nla), nla_len(nla), policy,
+                        extack);
 }
 
 /**
@@ -1253,6 +1263,7 @@ static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start)
  * @start: container attribute
  * @maxtype: maximum attribute type to be expected
  * @policy: validation policy
+ * @extack: extended ACK report struct
  *
  * Validates all attributes in the nested attribute stream against the
  * 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)
  * Returns 0 on success or a negative error code.
  */
 static inline int nla_validate_nested(const struct nlattr *start, int maxtype,
-                                     const struct nla_policy *policy)
+                                     const struct nla_policy *policy,
+                                     struct netlink_ext_ack *extack)
 {
-       return nla_validate(nla_data(start), nla_len(start), maxtype, policy);
+       return nla_validate(nla_data(start), nla_len(start), maxtype, policy,
+                           extack);
 }
 
 /**
index 106de5f7bf0675e29114cde65b7ea8a4e557c1ce..c07b941fce89fc6d249d021390523e077e97fd6b 100644 (file)
@@ -158,7 +158,8 @@ struct net_device *rtnl_create_link(struct net *net, const char *ifname,
 int rtnl_delete_link(struct net_device *dev);
 int rtnl_configure_link(struct net_device *dev, const struct ifinfomsg *ifm);
 
-int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len);
+int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len,
+                       struct netlink_ext_ack *exterr);
 
 #define MODULE_ALIAS_RTNL_LINK(kind) MODULE_ALIAS("rtnl-link-" kind)
 
index b42b8577fc2346045c4d88ede93960bf1cd8f3e7..a7e0b16078dff5035d1494d15f62622fdfe54b66 100644 (file)
@@ -112,6 +112,7 @@ static int validate_nla(const struct nlattr *nla, int maxtype,
  * @len: length of attribute stream
  * @maxtype: maximum attribute type to be expected
  * @policy: validation policy
+ * @extack: extended ACK report struct
  *
  * Validates all attributes in the specified attribute stream against the
  * specified policy. Attributes with a type exceeding maxtype will be
@@ -120,20 +121,23 @@ static int validate_nla(const struct nlattr *nla, int maxtype,
  * Returns 0 on success or a negative error code.
  */
 int nla_validate(const struct nlattr *head, int len, int maxtype,
-                const struct nla_policy *policy)
+                const struct nla_policy *policy,
+                struct netlink_ext_ack *extack)
 {
        const struct nlattr *nla;
-       int rem, err;
+       int rem;
 
        nla_for_each_attr(nla, head, len, rem) {
-               err = validate_nla(nla, maxtype, policy);
-               if (err < 0)
-                       goto errout;
+               int err = validate_nla(nla, maxtype, policy);
+
+               if (err < 0) {
+                       if (extack)
+                               extack->bad_attr = nla;
+                       return err;
+               }
        }
 
-       err = 0;
-errout:
-       return err;
+       return 0;
 }
 EXPORT_SYMBOL(nla_validate);
 
@@ -180,7 +184,8 @@ EXPORT_SYMBOL(nla_policy_len);
  * Returns 0 on success or a negative error code.
  */
 int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
-             int len, const struct nla_policy *policy)
+             int len, const struct nla_policy *policy,
+             struct netlink_ext_ack *extack)
 {
        const struct nlattr *nla;
        int rem, err;
@@ -193,8 +198,11 @@ int nla_parse(struct nlattr **tb, int maxtype, const struct nlattr *head,
                if (type > 0 && type <= maxtype) {
                        if (policy) {
                                err = validate_nla(nla, maxtype, policy);
-                               if (err < 0)
+                               if (err < 0) {
+                                       if (extack)
+                                               extack->bad_attr = nla;
                                        goto errout;
+                               }
                        }
 
                        tb[type] = (struct nlattr *)nla;
index 1270207f3d7c9dd6fde0e1f7839acfe18a4d82c9..9c94aad153b308d4ca3e1fb098f045365895a218 100644 (file)
@@ -35,7 +35,8 @@ static inline int vlan_validate_qos_map(struct nlattr *attr)
 {
        if (!attr)
                return 0;
-       return nla_validate_nested(attr, IFLA_VLAN_QOS_MAX, vlan_map_policy);
+       return nla_validate_nested(attr, IFLA_VLAN_QOS_MAX, vlan_map_policy,
+                                  NULL);
 }
 
 static int vlan_validate(struct nlattr *tb[], struct nlattr *data[])
index 056e6ac49d8fc7727fce8fc8320b8db4ac5351d2..993626a7fc3b6715bd3e3a193945f7ce78dad5b5 100644 (file)
@@ -464,7 +464,8 @@ static int br_mdb_parse(struct sk_buff *skb, struct nlmsghdr *nlh,
        struct net_device *dev;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX, NULL);
+       err = nlmsg_parse(nlh, sizeof(*bpm), tb, MDBA_SET_ENTRY_MAX, NULL,
+                         NULL);
        if (err < 0)
                return err;
 
index a8f6acd23e309dcf51e6825076d9b3ba00996a9c..e6dea5cd6bd6ad28b8b2ae4849c1dea242ae14cb 100644 (file)
@@ -748,8 +748,8 @@ int br_setlink(struct net_device *dev, struct nlmsghdr *nlh, u16 flags)
 
        if (p && protinfo) {
                if (protinfo->nla_type & NLA_F_NESTED) {
-                       err = nla_parse_nested(tb, IFLA_BRPORT_MAX,
-                                              protinfo, br_port_policy);
+                       err = nla_parse_nested(tb, IFLA_BRPORT_MAX, protinfo,
+                                              br_port_policy, NULL);
                        if (err)
                                return err;
 
index c913491495ab21ade17dec3512bd1d0a829b8e67..3712c7f0e00cd1addd73cdfe4504b687e425d0ec 100644 (file)
@@ -227,8 +227,8 @@ int br_parse_vlan_tunnel_info(struct nlattr *attr,
 
        memset(tinfo, 0, sizeof(*tinfo));
 
-       err = nla_parse_nested(tb, IFLA_BRIDGE_VLAN_TUNNEL_MAX,
-                              attr, vlan_tunnel_policy);
+       err = nla_parse_nested(tb, IFLA_BRIDGE_VLAN_TUNNEL_MAX, attr,
+                              vlan_tunnel_policy, NULL);
        if (err < 0)
                return err;
 
index 3c117a33e15f953213b23fe721804deafa73dc1d..3b84fb7d98aab122080786436bbab772f1821875 100644 (file)
@@ -641,7 +641,7 @@ static int cgw_parse_attr(struct nlmsghdr *nlh, struct cf_mod *mod,
        memset(mod, 0, sizeof(*mod));
 
        err = nlmsg_parse(nlh, sizeof(struct rtcanmsg), tb, CGW_MAX,
-                         cgw_policy);
+                         cgw_policy, NULL);
        if (err < 0)
                return err;
 
index 816e3ccb0ec9ffc41442300f64cc63c97d1af879..df03110ca3c869e258057fb40f1d5600171404ca 100644 (file)
@@ -386,7 +386,7 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh)
                goto errout;
        }
 
-       err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy);
+       err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -580,7 +580,7 @@ int fib_nl_delrule(struct sk_buff *skb, struct nlmsghdr *nlh)
                goto errout;
        }
 
-       err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy);
+       err = nlmsg_parse(nlh, sizeof(*frh), tb, FRA_MAX, ops->policy, NULL);
        if (err < 0)
                goto errout;
 
index 0cfe7b0216c3522a8d05d404423de939ad2cc2d5..b3bc0a31af9f3bd2d21fd12b9b2885d9b1573a4d 100644 (file)
@@ -209,7 +209,8 @@ static int bpf_parse_prog(struct nlattr *attr, struct bpf_lwt_prog *prog,
        int ret;
        u32 fd;
 
-       ret = nla_parse_nested(tb, LWT_BPF_PROG_MAX, attr, bpf_prog_policy);
+       ret = nla_parse_nested(tb, LWT_BPF_PROG_MAX, attr, bpf_prog_policy,
+                              NULL);
        if (ret < 0)
                return ret;
 
@@ -249,7 +250,7 @@ static int bpf_build_state(struct nlattr *nla,
        if (family != AF_INET && family != AF_INET6)
                return -EAFNOSUPPORT;
 
-       ret = nla_parse_nested(tb, LWT_BPF_MAX, nla, bpf_nl_policy);
+       ret = nla_parse_nested(tb, LWT_BPF_MAX, nla, bpf_nl_policy, NULL);
        if (ret < 0)
                return ret;
 
index 8ae87c591c8e71f27de4008666684044884762de..31f37b264710c279a70f7c64693abacb475a5fd2 100644 (file)
@@ -1661,7 +1661,7 @@ static int neigh_add(struct sk_buff *skb, struct nlmsghdr *nlh)
        int err;
 
        ASSERT_RTNL();
-       err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
+       err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL);
        if (err < 0)
                goto out;
 
@@ -1946,7 +1946,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
        int err, tidx;
 
        err = nlmsg_parse(nlh, sizeof(*ndtmsg), tb, NDTA_MAX,
-                         nl_neightbl_policy);
+                         nl_neightbl_policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -1984,7 +1984,7 @@ static int neightbl_set(struct sk_buff *skb, struct nlmsghdr *nlh)
                int i, ifindex = 0;
 
                err = nla_parse_nested(tbp, NDTPA_MAX, tb[NDTA_PARMS],
-                                      nl_ntbl_parm_policy);
+                                      nl_ntbl_parm_policy, NULL);
                if (err < 0)
                        goto errout_tbl_lock;
 
@@ -2275,7 +2275,7 @@ static int neigh_dump_table(struct neigh_table *tbl, struct sk_buff *skb,
        unsigned int flags = NLM_F_MULTI;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL);
+       err = nlmsg_parse(nlh, sizeof(struct ndmsg), tb, NDA_MAX, NULL, NULL);
        if (!err) {
                if (tb[NDA_IFINDEX])
                        filter_idx = nla_get_u32(tb[NDA_IFINDEX]);
index 652468ff65b79d5c9d45ece0d3289de480bbc603..ec18cbc756d26df7276a85b9ddc77d7b2fee6bc0 100644 (file)
@@ -579,7 +579,7 @@ static int rtnl_net_newid(struct sk_buff *skb, struct nlmsghdr *nlh)
        int nsid, err;
 
        err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX,
-                         rtnl_net_policy);
+                         rtnl_net_policy, NULL);
        if (err < 0)
                return err;
        if (!tb[NETNSA_NSID])
@@ -653,7 +653,7 @@ static int rtnl_net_getid(struct sk_buff *skb, struct nlmsghdr *nlh)
        int err, id;
 
        err = nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, NETNSA_MAX,
-                         rtnl_net_policy);
+                         rtnl_net_policy, NULL);
        if (err < 0)
                return err;
        if (tb[NETNSA_PID])
index 3cc4a627a537e68660b2989a33bdd3f762e48ae3..0ee5479528b57f76b9575e7bffeee16c3391b9b6 100644 (file)
@@ -1515,7 +1515,8 @@ static const struct rtnl_link_ops *linkinfo_to_kind_ops(const struct nlattr *nla
        const struct rtnl_link_ops *ops = NULL;
        struct nlattr *linfo[IFLA_INFO_MAX + 1];
 
-       if (nla_parse_nested(linfo, IFLA_INFO_MAX, nla, ifla_info_policy) < 0)
+       if (nla_parse_nested(linfo, IFLA_INFO_MAX, nla,
+                            ifla_info_policy, NULL) < 0)
                return NULL;
 
        if (linfo[IFLA_INFO_KIND]) {
@@ -1592,8 +1593,8 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb)
        hdrlen = nlmsg_len(cb->nlh) < sizeof(struct ifinfomsg) ?
                 sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
 
-       if (nlmsg_parse(cb->nlh, hdrlen, tb, IFLA_MAX, ifla_policy) >= 0) {
-
+       if (nlmsg_parse(cb->nlh, hdrlen, tb, IFLA_MAX,
+                       ifla_policy, NULL) >= 0) {
                if (tb[IFLA_EXT_MASK])
                        ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
 
@@ -1640,9 +1641,10 @@ out:
        return skb->len;
 }
 
-int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len)
+int rtnl_nla_parse_ifla(struct nlattr **tb, const struct nlattr *head, int len,
+                       struct netlink_ext_ack *exterr)
 {
-       return nla_parse(tb, IFLA_MAX, head, len, ifla_policy);
+       return nla_parse(tb, IFLA_MAX, head, len, ifla_policy, exterr);
 }
 EXPORT_SYMBOL(rtnl_nla_parse_ifla);
 
@@ -2078,7 +2080,7 @@ static int do_setlink(const struct sk_buff *skb,
                                goto errout;
                        }
                        err = nla_parse_nested(vfinfo, IFLA_VF_MAX, attr,
-                                              ifla_vf_policy);
+                                              ifla_vf_policy, NULL);
                        if (err < 0)
                                goto errout;
                        err = do_setvfinfo(dev, vfinfo);
@@ -2106,7 +2108,7 @@ static int do_setlink(const struct sk_buff *skb,
                                goto errout;
                        }
                        err = nla_parse_nested(port, IFLA_PORT_MAX, attr,
-                                              ifla_port_policy);
+                                              ifla_port_policy, NULL);
                        if (err < 0)
                                goto errout;
                        if (!port[IFLA_PORT_VF]) {
@@ -2126,7 +2128,8 @@ static int do_setlink(const struct sk_buff *skb,
                struct nlattr *port[IFLA_PORT_MAX+1];
 
                err = nla_parse_nested(port, IFLA_PORT_MAX,
-                       tb[IFLA_PORT_SELF], ifla_port_policy);
+                                      tb[IFLA_PORT_SELF], ifla_port_policy,
+                                      NULL);
                if (err < 0)
                        goto errout;
 
@@ -2170,7 +2173,7 @@ static int do_setlink(const struct sk_buff *skb,
                u32 xdp_flags = 0;
 
                err = nla_parse_nested(xdp, IFLA_XDP_MAX, tb[IFLA_XDP],
-                                      ifla_xdp_policy);
+                                      ifla_xdp_policy, NULL);
                if (err < 0)
                        goto errout;
 
@@ -2219,7 +2222,7 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh)
        struct nlattr *tb[IFLA_MAX+1];
        char ifname[IFNAMSIZ];
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -2312,7 +2315,7 @@ static int rtnl_dellink(struct sk_buff *skb, struct nlmsghdr *nlh)
        struct nlattr *tb[IFLA_MAX+1];
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL);
        if (err < 0)
                return err;
 
@@ -2441,7 +2444,7 @@ static int rtnl_newlink(struct sk_buff *skb, struct nlmsghdr *nlh)
 #ifdef CONFIG_MODULES
 replay:
 #endif
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL);
        if (err < 0)
                return err;
 
@@ -2472,7 +2475,8 @@ replay:
 
        if (tb[IFLA_LINKINFO]) {
                err = nla_parse_nested(linkinfo, IFLA_INFO_MAX,
-                                      tb[IFLA_LINKINFO], ifla_info_policy);
+                                      tb[IFLA_LINKINFO], ifla_info_policy,
+                                      NULL);
                if (err < 0)
                        return err;
        } else
@@ -2497,7 +2501,7 @@ replay:
                        if (ops->maxtype && linkinfo[IFLA_INFO_DATA]) {
                                err = nla_parse_nested(attr, ops->maxtype,
                                                       linkinfo[IFLA_INFO_DATA],
-                                                      ops->policy);
+                                                      ops->policy, NULL);
                                if (err < 0)
                                        return err;
                                data = attr;
@@ -2515,7 +2519,8 @@ replay:
                                err = nla_parse_nested(slave_attr,
                                                       m_ops->slave_maxtype,
                                                       linkinfo[IFLA_INFO_SLAVE_DATA],
-                                                      m_ops->slave_policy);
+                                                      m_ops->slave_policy,
+                                                      NULL);
                                if (err < 0)
                                        return err;
                                slave_data = slave_attr;
@@ -2684,7 +2689,7 @@ static int rtnl_getlink(struct sk_buff *skb, struct nlmsghdr* nlh)
        int err;
        u32 ext_filter_mask = 0;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFLA_MAX, ifla_policy, NULL);
        if (err < 0)
                return err;
 
@@ -2734,7 +2739,7 @@ static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh)
        hdrlen = nlmsg_len(nlh) < sizeof(struct ifinfomsg) ?
                 sizeof(struct rtgenmsg) : sizeof(struct ifinfomsg);
 
-       if (nlmsg_parse(nlh, hdrlen, tb, IFLA_MAX, ifla_policy) >= 0) {
+       if (nlmsg_parse(nlh, hdrlen, tb, IFLA_MAX, ifla_policy, NULL) >= 0) {
                if (tb[IFLA_EXT_MASK])
                        ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]);
        }
@@ -2965,7 +2970,7 @@ static int rtnl_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh)
        u16 vid;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
+       err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
@@ -3068,7 +3073,7 @@ static int rtnl_fdb_del(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!netlink_capable(skb, CAP_NET_ADMIN))
                return -EPERM;
 
-       err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL);
+       err = nlmsg_parse(nlh, sizeof(*ndm), tb, NDA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
@@ -3203,8 +3208,8 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
        int err = 0;
        int fidx = 0;
 
-       if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb, IFLA_MAX,
-                       ifla_policy) == 0) {
+       if (nlmsg_parse(cb->nlh, sizeof(struct ifinfomsg), tb,
+                       IFLA_MAX, ifla_policy, NULL) == 0) {
                if (tb[IFLA_MASTER])
                        br_idx = nla_get_u32(tb[IFLA_MASTER]);
        }
index 3202d75329b504b6442441becc31157e0c2be7a5..3f5a5f71057675f8fde30c618c7f59a55379a04b 100644 (file)
@@ -245,8 +245,7 @@ static int dcbnl_getpfccfg(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EOPNOTSUPP;
 
        ret = nla_parse_nested(data, DCB_PFC_UP_ATTR_MAX,
-                              tb[DCB_ATTR_PFC_CFG],
-                              dcbnl_pfc_up_nest);
+                              tb[DCB_ATTR_PFC_CFG], dcbnl_pfc_up_nest, NULL);
        if (ret)
                return ret;
 
@@ -304,7 +303,7 @@ static int dcbnl_getcap(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EOPNOTSUPP;
 
        ret = nla_parse_nested(data, DCB_CAP_ATTR_MAX, tb[DCB_ATTR_CAP],
-                              dcbnl_cap_nest);
+                              dcbnl_cap_nest, NULL);
        if (ret)
                return ret;
 
@@ -348,7 +347,7 @@ static int dcbnl_getnumtcs(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EOPNOTSUPP;
 
        ret = nla_parse_nested(data, DCB_NUMTCS_ATTR_MAX, tb[DCB_ATTR_NUMTCS],
-                              dcbnl_numtcs_nest);
+                              dcbnl_numtcs_nest, NULL);
        if (ret)
                return ret;
 
@@ -393,7 +392,7 @@ static int dcbnl_setnumtcs(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EOPNOTSUPP;
 
        ret = nla_parse_nested(data, DCB_NUMTCS_ATTR_MAX, tb[DCB_ATTR_NUMTCS],
-                              dcbnl_numtcs_nest);
+                              dcbnl_numtcs_nest, NULL);
        if (ret)
                return ret;
 
@@ -452,7 +451,7 @@ static int dcbnl_getapp(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EINVAL;
 
        ret = nla_parse_nested(app_tb, DCB_APP_ATTR_MAX, tb[DCB_ATTR_APP],
-                              dcbnl_app_nest);
+                              dcbnl_app_nest, NULL);
        if (ret)
                return ret;
 
@@ -520,7 +519,7 @@ static int dcbnl_setapp(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EINVAL;
 
        ret = nla_parse_nested(app_tb, DCB_APP_ATTR_MAX, tb[DCB_ATTR_APP],
-                              dcbnl_app_nest);
+                              dcbnl_app_nest, NULL);
        if (ret)
                return ret;
 
@@ -577,8 +576,8 @@ static int __dcbnl_pg_getcfg(struct net_device *netdev, struct nlmsghdr *nlh,
            !netdev->dcbnl_ops->getpgbwgcfgrx)
                return -EOPNOTSUPP;
 
-       ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX,
-                              tb[DCB_ATTR_PG_CFG], dcbnl_pg_nest);
+       ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX, tb[DCB_ATTR_PG_CFG],
+                              dcbnl_pg_nest, NULL);
        if (ret)
                return ret;
 
@@ -597,8 +596,8 @@ static int __dcbnl_pg_getcfg(struct net_device *netdev, struct nlmsghdr *nlh,
                        data = pg_tb[DCB_PG_ATTR_TC_ALL];
                else
                        data = pg_tb[i];
-               ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX,
-                                      data, dcbnl_tc_param_nest);
+               ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX, data,
+                                      dcbnl_tc_param_nest, NULL);
                if (ret)
                        goto err_pg;
 
@@ -735,8 +734,7 @@ static int dcbnl_setpfccfg(struct net_device *netdev, struct nlmsghdr *nlh,
                return -EOPNOTSUPP;
 
        ret = nla_parse_nested(data, DCB_PFC_UP_ATTR_MAX,
-                              tb[DCB_ATTR_PFC_CFG],
-                              dcbnl_pfc_up_nest);
+                              tb[DCB_ATTR_PFC_CFG], dcbnl_pfc_up_nest, NULL);
        if (ret)
                return ret;
 
@@ -791,8 +789,8 @@ static int __dcbnl_pg_setcfg(struct net_device *netdev, struct nlmsghdr *nlh,
            !netdev->dcbnl_ops->setpgbwgcfgrx)
                return -EOPNOTSUPP;
 
-       ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX,
-                              tb[DCB_ATTR_PG_CFG], dcbnl_pg_nest);
+       ret = nla_parse_nested(pg_tb, DCB_PG_ATTR_MAX, tb[DCB_ATTR_PG_CFG],
+                              dcbnl_pg_nest, NULL);
        if (ret)
                return ret;
 
@@ -801,7 +799,7 @@ static int __dcbnl_pg_setcfg(struct net_device *netdev, struct nlmsghdr *nlh,
                        continue;
 
                ret = nla_parse_nested(param_tb, DCB_TC_ATTR_PARAM_MAX,
-                                      pg_tb[i], dcbnl_tc_param_nest);
+                                      pg_tb[i], dcbnl_tc_param_nest, NULL);
                if (ret)
                        return ret;
 
@@ -889,8 +887,8 @@ static int dcbnl_bcn_getcfg(struct net_device *netdev, struct nlmsghdr *nlh,
            !netdev->dcbnl_ops->getbcncfg)
                return -EOPNOTSUPP;
 
-       ret = nla_parse_nested(bcn_tb, DCB_BCN_ATTR_MAX,
-                              tb[DCB_ATTR_BCN], dcbnl_bcn_nest);
+       ret = nla_parse_nested(bcn_tb, DCB_BCN_ATTR_MAX, tb[DCB_ATTR_BCN],
+                              dcbnl_bcn_nest, NULL);
        if (ret)
                return ret;
 
@@ -948,9 +946,8 @@ static int dcbnl_bcn_setcfg(struct net_device *netdev, struct nlmsghdr *nlh,
            !netdev->dcbnl_ops->setbcnrp)
                return -EOPNOTSUPP;
 
-       ret = nla_parse_nested(data, DCB_BCN_ATTR_MAX,
-                              tb[DCB_ATTR_BCN],
-                              dcbnl_pfc_up_nest);
+       ret = nla_parse_nested(data, DCB_BCN_ATTR_MAX, tb[DCB_ATTR_BCN],
+                              dcbnl_pfc_up_nest, NULL);
        if (ret)
                return ret;
 
@@ -1424,8 +1421,8 @@ static int dcbnl_ieee_set(struct net_device *netdev, struct nlmsghdr *nlh,
        if (!tb[DCB_ATTR_IEEE])
                return -EINVAL;
 
-       err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX,
-                              tb[DCB_ATTR_IEEE], dcbnl_ieee_policy);
+       err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX, tb[DCB_ATTR_IEEE],
+                              dcbnl_ieee_policy, NULL);
        if (err)
                return err;
 
@@ -1508,8 +1505,8 @@ static int dcbnl_ieee_del(struct net_device *netdev, struct nlmsghdr *nlh,
        if (!tb[DCB_ATTR_IEEE])
                return -EINVAL;
 
-       err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX,
-                              tb[DCB_ATTR_IEEE], dcbnl_ieee_policy);
+       err = nla_parse_nested(ieee, DCB_ATTR_IEEE_MAX, tb[DCB_ATTR_IEEE],
+                              dcbnl_ieee_policy, NULL);
        if (err)
                return err;
 
@@ -1581,8 +1578,8 @@ static int dcbnl_getfeatcfg(struct net_device *netdev, struct nlmsghdr *nlh,
        if (!tb[DCB_ATTR_FEATCFG])
                return -EINVAL;
 
-       ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX, tb[DCB_ATTR_FEATCFG],
-                              dcbnl_featcfg_nest);
+       ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX,
+                              tb[DCB_ATTR_FEATCFG], dcbnl_featcfg_nest, NULL);
        if (ret)
                return ret;
 
@@ -1625,8 +1622,8 @@ static int dcbnl_setfeatcfg(struct net_device *netdev, struct nlmsghdr *nlh,
        if (!tb[DCB_ATTR_FEATCFG])
                return -EINVAL;
 
-       ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX, tb[DCB_ATTR_FEATCFG],
-                              dcbnl_featcfg_nest);
+       ret = nla_parse_nested(data, DCB_FEATCFG_ATTR_MAX,
+                              tb[DCB_ATTR_FEATCFG], dcbnl_featcfg_nest, NULL);
 
        if (ret)
                goto err;
@@ -1715,7 +1712,7 @@ static int dcb_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
                return -EPERM;
 
        ret = nlmsg_parse(nlh, sizeof(*dcb), tb, DCB_ATTR_MAX,
-                         dcbnl_rtnl_policy);
+                         dcbnl_rtnl_policy, NULL);
        if (ret < 0)
                return ret;
 
index 8fdd9f492b0ea2201db70cfe83ebe1f3384c7b04..e65f1be44e8e15974ca842f86c5850eed3dceb87 100644 (file)
@@ -581,7 +581,7 @@ static int dn_nl_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!net_eq(net, &init_net))
                goto errout;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -625,7 +625,7 @@ static int dn_nl_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!net_eq(net, &init_net))
                return -EINVAL;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, dn_ifa_policy, NULL);
        if (err < 0)
                return err;
 
index 7af0ba6157a108578182eda3ec75ec7bd0c27859..34663bf8aa6d54b620e45f3274d423396675c672 100644 (file)
@@ -515,7 +515,8 @@ static int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!net_eq(net, &init_net))
                return -EINVAL;
 
-       err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy);
+       err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy,
+                         NULL);
        if (err < 0)
                return err;
 
@@ -540,7 +541,8 @@ static int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh)
        if (!net_eq(net, &init_net))
                return -EINVAL;
 
-       err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy);
+       err = nlmsg_parse(nlh, sizeof(*r), attrs, RTA_MAX, rtm_dn_policy,
+                         NULL);
        if (err < 0)
                return err;
 
index b1dc096d22f8c83e771b1df68d7815661ac51bae..2d7097bbc666a70d81c64d00d62fd763c2059d8a 100644 (file)
@@ -1654,7 +1654,7 @@ static int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
        if (!net_eq(net, &init_net))
                return -EINVAL;
 
-       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_dn_policy);
+       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_dn_policy, NULL);
        if (err < 0)
                return err;
 
index fc60cd061f3966a2381803a8e4d85206770253dc..d6b1a1b219097a9c3d1ed457c5e6e93d94f5ed4c 100644 (file)
@@ -249,8 +249,7 @@ nl802154_prepare_wpan_dev_dump(struct sk_buff *skb,
        if (!cb->args[0]) {
                err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize,
                                  genl_family_attrbuf(&nl802154_fam),
-                                 nl802154_fam.maxattr,
-                                 nl802154_policy);
+                                 nl802154_fam.maxattr, nl802154_policy, NULL);
                if (err)
                        goto out_unlock;
 
@@ -562,8 +561,8 @@ static int nl802154_dump_wpan_phy_parse(struct sk_buff *skb,
                                        struct nl802154_dump_wpan_phy_state *state)
 {
        struct nlattr **tb = genl_family_attrbuf(&nl802154_fam);
-       int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize,
-                             tb, nl802154_fam.maxattr, nl802154_policy);
+       int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl802154_fam.hdrsize, tb,
+                             nl802154_fam.maxattr, nl802154_policy, NULL);
 
        /* TODO check if we can handle error here,
         * we have no backward compatibility
@@ -1308,7 +1307,7 @@ ieee802154_llsec_parse_dev_addr(struct nlattr *nla,
        struct nlattr *attrs[NL802154_DEV_ADDR_ATTR_MAX + 1];
 
        if (!nla || nla_parse_nested(attrs, NL802154_DEV_ADDR_ATTR_MAX, nla,
-                                    nl802154_dev_addr_policy))
+                                    nl802154_dev_addr_policy, NULL))
                return -EINVAL;
 
        if (!attrs[NL802154_DEV_ADDR_ATTR_PAN_ID] ||
@@ -1348,7 +1347,7 @@ ieee802154_llsec_parse_key_id(struct nlattr *nla,
        struct nlattr *attrs[NL802154_KEY_ID_ATTR_MAX + 1];
 
        if (!nla || nla_parse_nested(attrs, NL802154_KEY_ID_ATTR_MAX, nla,
-                                    nl802154_key_id_policy))
+                                    nl802154_key_id_policy, NULL))
                return -EINVAL;
 
        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)
 
        if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
                             info->attrs[NL802154_ATTR_SEC_KEY],
-                            nl802154_key_policy))
+                            nl802154_key_policy, NULL))
                return -EINVAL;
 
        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)
 
        if (nla_parse_nested(attrs, NL802154_KEY_ATTR_MAX,
                             info->attrs[NL802154_ATTR_SEC_KEY],
-                            nl802154_key_policy))
+                            nl802154_key_policy, NULL))
                return -EINVAL;
 
        if (ieee802154_llsec_parse_key_id(attrs[NL802154_KEY_ATTR_ID], &id) < 0)
@@ -1729,8 +1728,8 @@ ieee802154_llsec_parse_device(struct nlattr *nla,
 {
        struct nlattr *attrs[NL802154_DEV_ATTR_MAX + 1];
 
-       if (!nla || nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX, nla,
-                                    nl802154_dev_policy))
+       if (!nla || nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
+                                    nla, nl802154_dev_policy, NULL))
                return -EINVAL;
 
        memset(dev, 0, sizeof(*dev));
@@ -1783,7 +1782,7 @@ static int nl802154_del_llsec_dev(struct sk_buff *skb, struct genl_info *info)
 
        if (nla_parse_nested(attrs, NL802154_DEV_ATTR_MAX,
                             info->attrs[NL802154_ATTR_SEC_DEVICE],
-                            nl802154_dev_policy))
+                            nl802154_dev_policy, NULL))
                return -EINVAL;
 
        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
        if (!info->attrs[NL802154_ATTR_SEC_DEVKEY] ||
            nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
                             info->attrs[NL802154_ATTR_SEC_DEVKEY],
-                            nl802154_devkey_policy) < 0)
+                            nl802154_devkey_policy, NULL) < 0)
                return -EINVAL;
 
        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
 
        if (nla_parse_nested(attrs, NL802154_DEVKEY_ATTR_MAX,
                             info->attrs[NL802154_ATTR_SEC_DEVKEY],
-                            nl802154_devkey_policy))
+                            nl802154_devkey_policy, NULL))
                return -EINVAL;
 
        if (!attrs[NL802154_DEVKEY_ATTR_EXTENDED_ADDR])
@@ -2063,8 +2062,8 @@ llsec_parse_seclevel(struct nlattr *nla, struct ieee802154_llsec_seclevel *sl)
 {
        struct nlattr *attrs[NL802154_SECLEVEL_ATTR_MAX + 1];
 
-       if (!nla || nla_parse_nested(attrs, NL802154_SECLEVEL_ATTR_MAX, nla,
-                                    nl802154_seclevel_policy))
+       if (!nla || nla_parse_nested(attrs, NL802154_SECLEVEL_ATTR_MAX,
+                                    nla, nl802154_seclevel_policy, NULL))
                return -EINVAL;
 
        memset(sl, 0, sizeof(*sl));
index 6d3602ec640c7ae620692527000f7b03556b0ef7..f33f53791f500a6992e4a6aa6f47ba773d79256f 100644 (file)
@@ -582,7 +582,8 @@ static int inet_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
 
        ASSERT_RTNL();
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
@@ -752,7 +753,8 @@ static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh,
        struct in_device *in_dev;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv4_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
@@ -1717,7 +1719,7 @@ static int inet_validate_link_af(const struct net_device *dev,
        if (dev && !__in_dev_get_rtnl(dev))
                return -EAFNOSUPPORT;
 
-       err = nla_parse_nested(tb, IFLA_INET_MAX, nla, inet_af_policy);
+       err = nla_parse_nested(tb, IFLA_INET_MAX, nla, inet_af_policy, NULL);
        if (err < 0)
                return err;
 
@@ -1745,7 +1747,7 @@ static int inet_set_link_af(struct net_device *dev, const struct nlattr *nla)
        if (!in_dev)
                return -EAFNOSUPPORT;
 
-       if (nla_parse_nested(tb, IFLA_INET_MAX, nla, NULL) < 0)
+       if (nla_parse_nested(tb, IFLA_INET_MAX, nla, NULL, NULL) < 0)
                BUG();
 
        if (tb[IFLA_INET_CONF]) {
@@ -1882,7 +1884,7 @@ static int inet_netconf_get_devconf(struct sk_buff *in_skb,
        int err;
 
        err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX,
-                         devconf_ipv4_policy);
+                         devconf_ipv4_policy, NULL);
        if (err < 0)
                goto errout;
 
index 8f2133ffc2ff1b94871408a5f934cb938d3462b5..434dd2538716eb3529cf720e39c08c1b4bd86ed9 100644 (file)
@@ -632,7 +632,8 @@ static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
        int err, remaining;
        struct rtmsg *rtm;
 
-       err = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipv4_policy);
+       err = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipv4_policy,
+                            NULL);
        if (err < 0)
                goto errout;
 
index a31f47ccaad90deadb686b2a9091694c8c1ecb9d..baf196eaf1d81809a9264fb94daa58eae51f1bff 100644 (file)
@@ -235,7 +235,7 @@ static int ip_tun_build_state(struct nlattr *attr,
        struct nlattr *tb[LWTUNNEL_IP_MAX + 1];
        int err;
 
-       err = nla_parse_nested(tb, LWTUNNEL_IP_MAX, attr, ip_tun_policy);
+       err = nla_parse_nested(tb, LWTUNNEL_IP_MAX, attr, ip_tun_policy, NULL);
        if (err < 0)
                return err;
 
@@ -332,7 +332,8 @@ static int ip6_tun_build_state(struct nlattr *attr,
        struct nlattr *tb[LWTUNNEL_IP6_MAX + 1];
        int err;
 
-       err = nla_parse_nested(tb, LWTUNNEL_IP6_MAX, attr, ip6_tun_policy);
+       err = nla_parse_nested(tb, LWTUNNEL_IP6_MAX, attr, ip6_tun_policy,
+                              NULL);
        if (err < 0)
                return err;
 
index 5bca64fc71b717b95f196866adc3c6d951304eed..d7be21f2174ad0c9acba84915e5da346606da5cb 100644 (file)
@@ -2439,7 +2439,8 @@ static int rtm_to_ipmr_mfcc(struct net *net, struct nlmsghdr *nlh,
        struct rtmsg *rtm;
        int ret, rem;
 
-       ret = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipmr_policy);
+       ret = nlmsg_validate(nlh, sizeof(*rtm), RTA_MAX, rtm_ipmr_policy,
+                            NULL);
        if (ret < 0)
                goto out;
        rtm = nlmsg_data(nlh);
index 0fcc2d5192bde9c1a24c0919c408dc09eef7551c..7a4f2c38c3c4461366913da1135723df6d3b4451 100644 (file)
@@ -2645,7 +2645,8 @@ static int inet_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
        u32 table_id = RT_TABLE_MAIN;
        kuid_t uid;
 
-       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy);
+       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv4_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
index 67ec87ea5fb699eb8ba4634c91815f97d750ddf1..b330c2abcb248471923c448bd856c52746cf22be 100644 (file)
@@ -624,7 +624,7 @@ static int inet6_netconf_get_devconf(struct sk_buff *in_skb,
        int err;
 
        err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX,
-                         devconf_ipv6_policy);
+                         devconf_ipv6_policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -4408,7 +4408,8 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh)
        u32 ifa_flags;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy,
+                         NULL);
        if (err < 0)
                return err;
 
@@ -4520,7 +4521,8 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh)
        u32 ifa_flags;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy,
+                         NULL);
        if (err < 0)
                return err;
 
@@ -4881,7 +4883,8 @@ static int inet6_rtm_getaddr(struct sk_buff *in_skb, struct nlmsghdr *nlh)
        struct sk_buff *skb;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
@@ -5251,7 +5254,8 @@ static int inet6_validate_link_af(const struct net_device *dev,
        if (dev && !__in6_dev_get(dev))
                return -EAFNOSUPPORT;
 
-       return nla_parse_nested(tb, IFLA_INET6_MAX, nla, inet6_af_policy);
+       return nla_parse_nested(tb, IFLA_INET6_MAX, nla, inet6_af_policy,
+                               NULL);
 }
 
 static int check_addr_gen_mode(int mode)
@@ -5283,7 +5287,7 @@ static int inet6_set_link_af(struct net_device *dev, const struct nlattr *nla)
        if (!idev)
                return -EAFNOSUPPORT;
 
-       if (nla_parse_nested(tb, IFLA_INET6_MAX, nla, NULL) < 0)
+       if (nla_parse_nested(tb, IFLA_INET6_MAX, nla, NULL, NULL) < 0)
                BUG();
 
        if (tb[IFLA_INET6_TOKEN]) {
index a8f6986dcbe5ea5a36a3cc6fcf51becebb50c33b..6cb4ed91722ab73883eba038c842614a21cd4845 100644 (file)
@@ -413,7 +413,7 @@ static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh)
        u32 label;
        int err = 0;
 
-       err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy, NULL);
        if (err < 0)
                return err;
 
@@ -532,7 +532,7 @@ static int ip6addrlbl_get(struct sk_buff *in_skb, struct nlmsghdr *nlh)
        struct ip6addrlbl_entry *p;
        struct sk_buff *skb;
 
-       err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifal), tb, IFAL_MAX, ifal_policy, NULL);
        if (err < 0)
                return err;
 
index ce1aae4a7fc8fa9daf9f1502d0ac77d2be2aee31..b3df03e3faa07d96f170e5ff0b535ebb16216c05 100644 (file)
@@ -146,8 +146,7 @@ static int ila_build_state(struct nlattr *nla,
                return -EINVAL;
        }
 
-       ret = nla_parse_nested(tb, ILA_ATTR_MAX, nla,
-                              ila_nl_policy);
+       ret = nla_parse_nested(tb, ILA_ATTR_MAX, nla, ila_nl_policy, NULL);
        if (ret < 0)
                return ret;
 
index 9db1418993f2b8a5b4194895f243441033d4729a..ccde23eba7029fcc5420850337f438d29dda2b64 100644 (file)
@@ -2906,7 +2906,8 @@ static int rtm_to_fib6_config(struct sk_buff *skb, struct nlmsghdr *nlh,
        unsigned int pref;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy);
+       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
@@ -3574,7 +3575,8 @@ static int inet6_rtm_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh)
        struct flowi6 fl6;
        int err, iif = 0, oif = 0;
 
-       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy);
+       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_ipv6_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
index a644aaecdfd30cf629625127e422a4fe150821b7..7436a4a62f3e0e2a5734be1e6484b549f71a2b33 100644 (file)
@@ -328,7 +328,7 @@ static int seg6_build_state(struct nlattr *nla,
        int err;
 
        err = nla_parse_nested(tb, SEG6_IPTUNNEL_MAX, nla,
-                              seg6_iptunnel_policy);
+                              seg6_iptunnel_policy, NULL);
 
        if (err < 0)
                return err;
index 5928d22ba9c86813a13621fec6ebdcc62fd7aeba..07181d2273e1f2410114aa49489539d87344ccb8 100644 (file)
@@ -1122,7 +1122,7 @@ static int mpls_netconf_get_devconf(struct sk_buff *in_skb,
        int err;
 
        err = nlmsg_parse(nlh, sizeof(*ncm), tb, NETCONFA_MAX,
-                         devconf_mpls_policy);
+                         devconf_mpls_policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -1643,7 +1643,8 @@ static int rtm_to_route_config(struct sk_buff *skb,  struct nlmsghdr *nlh,
        int index;
        int err;
 
-       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_mpls_policy);
+       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_mpls_policy,
+                         NULL);
        if (err < 0)
                goto errout;
 
index fe00e98667cf603c5f01150fb4899f98c86c8496..369c7a23c86c1407702917488c90e0f3e7f8ee1a 100644 (file)
@@ -168,7 +168,7 @@ static int mpls_build_state(struct nlattr *nla,
        int ret;
 
        ret = nla_parse_nested(tb, MPLS_IPTUNNEL_MAX, nla,
-                              mpls_iptunnel_policy);
+                              mpls_iptunnel_policy, NULL);
        if (ret < 0)
                return ret;
 
index 26356bf8cebf0597fb943e32701972960189f620..9bd5b6636181074eebb5324376ea47eeb2bf2fc1 100644 (file)
@@ -295,7 +295,8 @@ ip_set_get_ipaddr4(struct nlattr *nla,  __be32 *ipaddr)
 
        if (unlikely(!flag_nested(nla)))
                return -IPSET_ERR_PROTOCOL;
-       if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla, ipaddr_policy))
+       if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla,
+                            ipaddr_policy, NULL))
                return -IPSET_ERR_PROTOCOL;
        if (unlikely(!ip_set_attr_netorder(tb, IPSET_ATTR_IPADDR_IPV4)))
                return -IPSET_ERR_PROTOCOL;
@@ -313,7 +314,8 @@ ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr)
        if (unlikely(!flag_nested(nla)))
                return -IPSET_ERR_PROTOCOL;
 
-       if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla, ipaddr_policy))
+       if (nla_parse_nested(tb, IPSET_ATTR_IPADDR_MAX, nla,
+                            ipaddr_policy, NULL))
                return -IPSET_ERR_PROTOCOL;
        if (unlikely(!ip_set_attr_netorder(tb, IPSET_ATTR_IPADDR_IPV6)))
                return -IPSET_ERR_PROTOCOL;
@@ -906,7 +908,7 @@ static int ip_set_create(struct net *net, struct sock *ctnl,
        /* Without holding any locks, create private part. */
        if (attr[IPSET_ATTR_DATA] &&
            nla_parse_nested(tb, IPSET_ATTR_CREATE_MAX, attr[IPSET_ATTR_DATA],
-                            set->type->create_policy)) {
+                            set->type->create_policy, NULL)) {
                ret = -IPSET_ERR_PROTOCOL;
                goto put_out;
        }
@@ -1257,8 +1259,8 @@ dump_init(struct netlink_callback *cb, struct ip_set_net *inst)
        ip_set_id_t index;
 
        /* Second pass, so parser can't fail */
-       nla_parse(cda, IPSET_ATTR_CMD_MAX,
-                 attr, nlh->nlmsg_len - min_len, ip_set_setname_policy);
+       nla_parse(cda, IPSET_ATTR_CMD_MAX, attr, nlh->nlmsg_len - min_len,
+                 ip_set_setname_policy, NULL);
 
        if (cda[IPSET_ATTR_SETNAME]) {
                struct ip_set *set;
@@ -1501,9 +1503,8 @@ call_ad(struct sock *ctnl, struct sk_buff *skb, struct ip_set *set,
                memcpy(&errmsg->msg, nlh, nlh->nlmsg_len);
                cmdattr = (void *)&errmsg->msg + min_len;
 
-               nla_parse(cda, IPSET_ATTR_CMD_MAX,
-                         cmdattr, nlh->nlmsg_len - min_len,
-                         ip_set_adt_policy);
+               nla_parse(cda, IPSET_ATTR_CMD_MAX, cmdattr,
+                         nlh->nlmsg_len - min_len, ip_set_adt_policy, NULL);
 
                errline = nla_data(cda[IPSET_ATTR_LINENO]);
 
@@ -1549,7 +1550,7 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
        if (attr[IPSET_ATTR_DATA]) {
                if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX,
                                     attr[IPSET_ATTR_DATA],
-                                    set->type->adt_policy))
+                                    set->type->adt_policy, NULL))
                        return -IPSET_ERR_PROTOCOL;
                ret = call_ad(ctnl, skb, set, tb, IPSET_ADD, flags,
                              use_lineno);
@@ -1561,7 +1562,7 @@ static int ip_set_uadd(struct net *net, struct sock *ctnl, struct sk_buff *skb,
                        if (nla_type(nla) != IPSET_ATTR_DATA ||
                            !flag_nested(nla) ||
                            nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla,
-                                            set->type->adt_policy))
+                                            set->type->adt_policy, NULL))
                                return -IPSET_ERR_PROTOCOL;
                        ret = call_ad(ctnl, skb, set, tb, IPSET_ADD,
                                      flags, use_lineno);
@@ -1603,7 +1604,7 @@ static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
        if (attr[IPSET_ATTR_DATA]) {
                if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX,
                                     attr[IPSET_ATTR_DATA],
-                                    set->type->adt_policy))
+                                    set->type->adt_policy, NULL))
                        return -IPSET_ERR_PROTOCOL;
                ret = call_ad(ctnl, skb, set, tb, IPSET_DEL, flags,
                              use_lineno);
@@ -1615,7 +1616,7 @@ static int ip_set_udel(struct net *net, struct sock *ctnl, struct sk_buff *skb,
                        if (nla_type(nla) != IPSET_ATTR_DATA ||
                            !flag_nested(nla) ||
                            nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, nla,
-                                            set->type->adt_policy))
+                                            set->type->adt_policy, NULL))
                                return -IPSET_ERR_PROTOCOL;
                        ret = call_ad(ctnl, skb, set, tb, IPSET_DEL,
                                      flags, use_lineno);
@@ -1646,7 +1647,7 @@ static int ip_set_utest(struct net *net, struct sock *ctnl, struct sk_buff *skb,
                return -ENOENT;
 
        if (nla_parse_nested(tb, IPSET_ATTR_ADT_MAX, attr[IPSET_ATTR_DATA],
-                            set->type->adt_policy))
+                            set->type->adt_policy, NULL))
                return -IPSET_ERR_PROTOCOL;
 
        rcu_read_lock_bh();
index 541aa76947755e1228deb8d3ad40e576b182a83f..adb7ee142c5f6f69b992316d2474356a5459759f 100644 (file)
@@ -3089,7 +3089,8 @@ static int ip_vs_genl_parse_service(struct netns_ipvs *ipvs,
 
        /* Parse mandatory identifying service fields first */
        if (nla == NULL ||
-           nla_parse_nested(attrs, IPVS_SVC_ATTR_MAX, nla, ip_vs_svc_policy))
+           nla_parse_nested(attrs, IPVS_SVC_ATTR_MAX, nla,
+                            ip_vs_svc_policy, NULL))
                return -EINVAL;
 
        nla_af          = attrs[IPVS_SVC_ATTR_AF];
@@ -3251,8 +3252,8 @@ static int ip_vs_genl_dump_dests(struct sk_buff *skb,
        mutex_lock(&__ip_vs_mutex);
 
        /* Try to find the service for which to dump destinations */
-       if (nlmsg_parse(cb->nlh, GENL_HDRLEN, attrs,
-                       IPVS_CMD_ATTR_MAX, ip_vs_cmd_policy))
+       if (nlmsg_parse(cb->nlh, GENL_HDRLEN, attrs, IPVS_CMD_ATTR_MAX,
+                       ip_vs_cmd_policy, NULL))
                goto out_err;
 
 
@@ -3288,7 +3289,8 @@ static int ip_vs_genl_parse_dest(struct ip_vs_dest_user_kern *udest,
 
        /* Parse mandatory identifying destination fields first */
        if (nla == NULL ||
-           nla_parse_nested(attrs, IPVS_DEST_ATTR_MAX, nla, ip_vs_dest_policy))
+           nla_parse_nested(attrs, IPVS_DEST_ATTR_MAX, nla,
+                            ip_vs_dest_policy, NULL))
                return -EINVAL;
 
        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)
                if (!info->attrs[IPVS_CMD_ATTR_DAEMON] ||
                    nla_parse_nested(daemon_attrs, IPVS_DAEMON_ATTR_MAX,
                                     info->attrs[IPVS_CMD_ATTR_DAEMON],
-                                    ip_vs_daemon_policy))
+                                    ip_vs_daemon_policy, NULL))
                        goto out;
 
                if (cmd == IPVS_CMD_NEW_DAEMON)
index ecdc324c77859303a2141e919b114e4d8c4c3576..ace824ab2e035382773a1992c16143e1575ac554 100644 (file)
@@ -908,7 +908,7 @@ static int ctnetlink_parse_tuple_ip(struct nlattr *attr,
        struct nf_conntrack_l3proto *l3proto;
        int ret = 0;
 
-       ret = nla_parse_nested(tb, CTA_IP_MAX, attr, NULL);
+       ret = nla_parse_nested(tb, CTA_IP_MAX, attr, NULL, NULL);
        if (ret < 0)
                return ret;
 
@@ -917,7 +917,7 @@ static int ctnetlink_parse_tuple_ip(struct nlattr *attr,
 
        if (likely(l3proto->nlattr_to_tuple)) {
                ret = nla_validate_nested(attr, CTA_IP_MAX,
-                                         l3proto->nla_policy);
+                                         l3proto->nla_policy, NULL);
                if (ret == 0)
                        ret = l3proto->nlattr_to_tuple(tb, tuple);
        }
@@ -938,7 +938,8 @@ static int ctnetlink_parse_tuple_proto(struct nlattr *attr,
        struct nf_conntrack_l4proto *l4proto;
        int ret = 0;
 
-       ret = nla_parse_nested(tb, CTA_PROTO_MAX, attr, proto_nla_policy);
+       ret = nla_parse_nested(tb, CTA_PROTO_MAX, attr, proto_nla_policy,
+                              NULL);
        if (ret < 0)
                return ret;
 
@@ -951,7 +952,7 @@ static int ctnetlink_parse_tuple_proto(struct nlattr *attr,
 
        if (likely(l4proto->nlattr_to_tuple)) {
                ret = nla_validate_nested(attr, CTA_PROTO_MAX,
-                                         l4proto->nla_policy);
+                                         l4proto->nla_policy, NULL);
                if (ret == 0)
                        ret = l4proto->nlattr_to_tuple(tb, tuple);
        }
@@ -1015,7 +1016,8 @@ ctnetlink_parse_tuple(const struct nlattr * const cda[],
 
        memset(tuple, 0, sizeof(*tuple));
 
-       err = nla_parse_nested(tb, CTA_TUPLE_MAX, cda[type], tuple_nla_policy);
+       err = nla_parse_nested(tb, CTA_TUPLE_MAX, cda[type], tuple_nla_policy,
+                              NULL);
        if (err < 0)
                return err;
 
@@ -1065,7 +1067,7 @@ static int ctnetlink_parse_help(const struct nlattr *attr, char **helper_name,
        int err;
        struct nlattr *tb[CTA_HELP_MAX+1];
 
-       err = nla_parse_nested(tb, CTA_HELP_MAX, attr, help_nla_policy);
+       err = nla_parse_nested(tb, CTA_HELP_MAX, attr, help_nla_policy, NULL);
        if (err < 0)
                return err;
 
@@ -1566,7 +1568,8 @@ static int ctnetlink_change_protoinfo(struct nf_conn *ct,
        struct nf_conntrack_l4proto *l4proto;
        int err = 0;
 
-       err = nla_parse_nested(tb, CTA_PROTOINFO_MAX, attr, protoinfo_policy);
+       err = nla_parse_nested(tb, CTA_PROTOINFO_MAX, attr, protoinfo_policy,
+                              NULL);
        if (err < 0)
                return err;
 
@@ -1591,7 +1594,7 @@ static int change_seq_adj(struct nf_ct_seqadj *seq,
        int err;
        struct nlattr *cda[CTA_SEQADJ_MAX+1];
 
-       err = nla_parse_nested(cda, CTA_SEQADJ_MAX, attr, seqadj_policy);
+       err = nla_parse_nested(cda, CTA_SEQADJ_MAX, attr, seqadj_policy, NULL);
        if (err < 0)
                return err;
 
@@ -2348,7 +2351,7 @@ ctnetlink_glue_parse(const struct nlattr *attr, struct nf_conn *ct)
        struct nlattr *cda[CTA_MAX+1];
        int ret;
 
-       ret = nla_parse_nested(cda, CTA_MAX, attr, ct_nla_policy);
+       ret = nla_parse_nested(cda, CTA_MAX, attr, ct_nla_policy, NULL);
        if (ret < 0)
                return ret;
 
@@ -2385,7 +2388,8 @@ ctnetlink_glue_attach_expect(const struct nlattr *attr, struct nf_conn *ct,
        struct nf_conntrack_expect *exp;
        int err;
 
-       err = nla_parse_nested(cda, CTA_EXPECT_MAX, attr, exp_nla_policy);
+       err = nla_parse_nested(cda, CTA_EXPECT_MAX, attr, exp_nla_policy,
+                              NULL);
        if (err < 0)
                return err;
 
@@ -3004,7 +3008,8 @@ ctnetlink_parse_expect_nat(const struct nlattr *attr,
        struct nf_conntrack_tuple nat_tuple = {};
        int err;
 
-       err = nla_parse_nested(tb, CTA_EXPECT_NAT_MAX, attr, exp_nat_nla_policy);
+       err = nla_parse_nested(tb, CTA_EXPECT_NAT_MAX, attr,
+                              exp_nat_nla_policy, NULL);
        if (err < 0)
                return err;
 
index 93dd1c5b7bff9e5285530a446bba6811ec26ead4..b2e02dfe7fa8a0a53e6b7faab84c2a9fc3d459c4 100644 (file)
@@ -665,7 +665,7 @@ static int nlattr_to_dccp(struct nlattr *cda[], struct nf_conn *ct)
                return 0;
 
        err = nla_parse_nested(tb, CTA_PROTOINFO_DCCP_MAX, attr,
-                              dccp_nla_policy);
+                              dccp_nla_policy, NULL);
        if (err < 0)
                return err;
 
index 33279aab583d5eac3016b4a58f6bf2ea8b457395..2a7300587c87ce6c8cf921bba0bb50f929532885 100644 (file)
@@ -584,10 +584,8 @@ static int nlattr_to_sctp(struct nlattr *cda[], struct nf_conn *ct)
        if (!attr)
                return 0;
 
-       err = nla_parse_nested(tb,
-                              CTA_PROTOINFO_SCTP_MAX,
-                              attr,
-                              sctp_nla_policy);
+       err = nla_parse_nested(tb, CTA_PROTOINFO_SCTP_MAX, attr,
+                              sctp_nla_policy, NULL);
        if (err < 0)
                return err;
 
index b122e9dacfed06e27aecab3fbc71203772d7b427..85bde77ad9674eb25aa670bcea3d70173e6840ba 100644 (file)
@@ -1234,7 +1234,8 @@ static int nlattr_to_tcp(struct nlattr *cda[], struct nf_conn *ct)
        if (!pattr)
                return 0;
 
-       err = nla_parse_nested(tb, CTA_PROTOINFO_TCP_MAX, pattr, tcp_nla_policy);
+       err = nla_parse_nested(tb, CTA_PROTOINFO_TCP_MAX, pattr,
+                              tcp_nla_policy, NULL);
        if (err < 0)
                return err;
 
index 82802e4a6640817e64eb3f3a6ffcb875ad14a747..908ba5abbc0b156821d0eec83ec0b1dc2b6b2798 100644 (file)
@@ -751,7 +751,8 @@ static int nfnetlink_parse_nat_proto(struct nlattr *attr,
        const struct nf_nat_l4proto *l4proto;
        int err;
 
-       err = nla_parse_nested(tb, CTA_PROTONAT_MAX, attr, protonat_nla_policy);
+       err = nla_parse_nested(tb, CTA_PROTONAT_MAX, attr,
+                              protonat_nla_policy, NULL);
        if (err < 0)
                return err;
 
@@ -780,7 +781,7 @@ nfnetlink_parse_nat(const struct nlattr *nat,
 
        memset(range, 0, sizeof(*range));
 
-       err = nla_parse_nested(tb, CTA_NAT_MAX, nat, nat_nla_policy);
+       err = nla_parse_nested(tb, CTA_NAT_MAX, nat, nat_nla_policy, NULL);
        if (err < 0)
                return err;
 
index 2d822d2fd83062d28f54737a9e7aae652f608d1b..907431318637852692259af4b12294e0f5e02ce7 100644 (file)
@@ -1182,7 +1182,8 @@ static struct nft_stats __percpu *nft_stats_alloc(const struct nlattr *attr)
        struct nft_stats *stats;
        int err;
 
-       err = nla_parse_nested(tb, NFTA_COUNTER_MAX, attr, nft_counter_policy);
+       err = nla_parse_nested(tb, NFTA_COUNTER_MAX, attr, nft_counter_policy,
+                              NULL);
        if (err < 0)
                return ERR_PTR(err);
 
@@ -1257,7 +1258,7 @@ static int nft_chain_parse_hook(struct net *net,
        int err;
 
        err = nla_parse_nested(ha, NFTA_HOOK_MAX, nla[NFTA_CHAIN_HOOK],
-                              nft_hook_policy);
+                              nft_hook_policy, NULL);
        if (err < 0)
                return err;
 
@@ -1724,7 +1725,7 @@ static int nf_tables_expr_parse(const struct nft_ctx *ctx,
        struct nlattr *tb[NFTA_EXPR_MAX + 1];
        int err;
 
-       err = nla_parse_nested(tb, NFTA_EXPR_MAX, nla, nft_expr_policy);
+       err = nla_parse_nested(tb, NFTA_EXPR_MAX, nla, nft_expr_policy, NULL);
        if (err < 0)
                return err;
 
@@ -1734,7 +1735,7 @@ static int nf_tables_expr_parse(const struct nft_ctx *ctx,
 
        if (tb[NFTA_EXPR_DATA]) {
                err = nla_parse_nested(info->tb, type->maxattr,
-                                      tb[NFTA_EXPR_DATA], type->policy);
+                                      tb[NFTA_EXPR_DATA], type->policy, NULL);
                if (err < 0)
                        goto err1;
        } else
@@ -2879,7 +2880,8 @@ static int nf_tables_set_desc_parse(const struct nft_ctx *ctx,
        struct nlattr *da[NFTA_SET_DESC_MAX + 1];
        int err;
 
-       err = nla_parse_nested(da, NFTA_SET_DESC_MAX, nla, nft_set_desc_policy);
+       err = nla_parse_nested(da, NFTA_SET_DESC_MAX, nla,
+                              nft_set_desc_policy, NULL);
        if (err < 0)
                return err;
 
@@ -3381,7 +3383,8 @@ static int nf_tables_dump_set(struct sk_buff *skb, struct netlink_callback *cb)
        int event, err;
 
        err = nlmsg_parse(cb->nlh, sizeof(struct nfgenmsg), nla,
-                         NFTA_SET_ELEM_LIST_MAX, nft_set_elem_list_policy);
+                         NFTA_SET_ELEM_LIST_MAX, nft_set_elem_list_policy,
+                         NULL);
        if (err < 0)
                return err;
 
@@ -3640,7 +3643,7 @@ static int nft_add_set_elem(struct nft_ctx *ctx, struct nft_set *set,
        int err;
 
        err = nla_parse_nested(nla, NFTA_SET_ELEM_MAX, attr,
-                              nft_set_elem_policy);
+                              nft_set_elem_policy, NULL);
        if (err < 0)
                return err;
 
@@ -3870,7 +3873,7 @@ static int nft_del_setelem(struct nft_ctx *ctx, struct nft_set *set,
        int err;
 
        err = nla_parse_nested(nla, NFTA_SET_ELEM_MAX, attr,
-                              nft_set_elem_policy);
+                              nft_set_elem_policy, NULL);
        if (err < 0)
                goto err1;
 
@@ -4101,7 +4104,8 @@ static struct nft_object *nft_obj_init(const struct nft_ctx *ctx,
        int err;
 
        if (attr) {
-               err = nla_parse_nested(tb, type->maxattr, attr, type->policy);
+               err = nla_parse_nested(tb, type->maxattr, attr, type->policy,
+                                      NULL);
                if (err < 0)
                        goto err1;
        } else {
@@ -5314,7 +5318,8 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data,
        struct nft_chain *chain;
        int err;
 
-       err = nla_parse_nested(tb, NFTA_VERDICT_MAX, nla, nft_verdict_policy);
+       err = nla_parse_nested(tb, NFTA_VERDICT_MAX, nla, nft_verdict_policy,
+                              NULL);
        if (err < 0)
                return err;
 
@@ -5444,7 +5449,7 @@ int nft_data_init(const struct nft_ctx *ctx,
        struct nlattr *tb[NFTA_DATA_MAX + 1];
        int err;
 
-       err = nla_parse_nested(tb, NFTA_DATA_MAX, nla, nft_data_policy);
+       err = nla_parse_nested(tb, NFTA_DATA_MAX, nla, nft_data_policy, NULL);
        if (err < 0)
                return err;
 
index 181d3bb800e66bb32e677008d7fbee51959ecabd..792def00a07df4ec5a699f558d5300d580e138ad 100644 (file)
@@ -192,8 +192,8 @@ replay:
                int attrlen = nlh->nlmsg_len - min_len;
                __u8 subsys_id = NFNL_SUBSYS_ID(type);
 
-               err = nla_parse(cda, ss->cb[cb_id].attr_count,
-                               attr, attrlen, ss->cb[cb_id].policy);
+               err = nla_parse(cda, ss->cb[cb_id].attr_count, attr, attrlen,
+                               ss->cb[cb_id].policy, NULL);
                if (err < 0) {
                        rcu_read_unlock();
                        return err;
@@ -377,8 +377,8 @@ replay:
                        struct nlattr *attr = (void *)nlh + min_len;
                        int attrlen = nlh->nlmsg_len - min_len;
 
-                       err = nla_parse(cda, ss->cb[cb_id].attr_count,
-                                       attr, attrlen, ss->cb[cb_id].policy);
+                       err = nla_parse(cda, ss->cb[cb_id].attr_count, attr,
+                                       attrlen, ss->cb[cb_id].policy, NULL);
                        if (err < 0)
                                goto ack;
 
@@ -467,7 +467,8 @@ static void nfnetlink_rcv_skb_batch(struct sk_buff *skb, struct nlmsghdr *nlh)
            skb->len < NLMSG_HDRLEN + sizeof(struct nfgenmsg))
                return;
 
-       err = nla_parse(cda, NFNL_BATCH_MAX, attr, attrlen, nfnl_batch_policy);
+       err = nla_parse(cda, NFNL_BATCH_MAX, attr, attrlen, nfnl_batch_policy,
+                       NULL);
        if (err < 0) {
                netlink_ack(skb, nlh, err, NULL);
                return;
index c86da174a5fced4e3c67307925332273b9f858fe..2837d5fb98bd17d283bc64a0e657ee95bb0281dd 100644 (file)
@@ -244,7 +244,8 @@ nfacct_filter_alloc(const struct nlattr * const attr)
        struct nlattr *tb[NFACCT_FILTER_MAX + 1];
        int err;
 
-       err = nla_parse_nested(tb, NFACCT_FILTER_MAX, attr, filter_policy);
+       err = nla_parse_nested(tb, NFACCT_FILTER_MAX, attr, filter_policy,
+                              NULL);
        if (err < 0)
                return ERR_PTR(err);
 
index d45558178da5b62a8ad7c896e096c1862c512091..5b6c683115668e3a8f1abc88af3210bdc393fccb 100644 (file)
@@ -77,7 +77,8 @@ nfnl_cthelper_parse_tuple(struct nf_conntrack_tuple *tuple,
        int err;
        struct nlattr *tb[NFCTH_TUPLE_MAX+1];
 
-       err = nla_parse_nested(tb, NFCTH_TUPLE_MAX, attr, nfnl_cthelper_tuple_pol);
+       err = nla_parse_nested(tb, NFCTH_TUPLE_MAX, attr,
+                              nfnl_cthelper_tuple_pol, NULL);
        if (err < 0)
                return err;
 
@@ -137,7 +138,8 @@ nfnl_cthelper_expect_policy(struct nf_conntrack_expect_policy *expect_policy,
        int err;
        struct nlattr *tb[NFCTH_POLICY_MAX+1];
 
-       err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr, nfnl_cthelper_expect_pol);
+       err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr,
+                              nfnl_cthelper_expect_pol, NULL);
        if (err < 0)
                return err;
 
@@ -171,7 +173,7 @@ nfnl_cthelper_parse_expect_policy(struct nf_conntrack_helper *helper,
        unsigned int class_max;
 
        ret = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr,
-                              nfnl_cthelper_expect_policy_set);
+                              nfnl_cthelper_expect_policy_set, NULL);
        if (ret < 0)
                return ret;
 
@@ -276,7 +278,7 @@ nfnl_cthelper_update_policy_one(const struct nf_conntrack_expect_policy *policy,
        int err;
 
        err = nla_parse_nested(tb, NFCTH_POLICY_MAX, attr,
-                              nfnl_cthelper_expect_pol);
+                              nfnl_cthelper_expect_pol, NULL);
        if (err < 0)
                return err;
 
@@ -336,7 +338,7 @@ static int nfnl_cthelper_update_policy(struct nf_conntrack_helper *helper,
        int err;
 
        err = nla_parse_nested(tb, NFCTH_POLICY_SET_MAX, attr,
-                              nfnl_cthelper_expect_policy_set);
+                              nfnl_cthelper_expect_policy_set, NULL);
        if (err < 0)
                return err;
 
index 57c2cdf7b6912f9a2096c541355e09ad01f79cb2..0a3510e7e3960f01844b071733453301ef5fdf26 100644 (file)
@@ -56,7 +56,8 @@ ctnl_timeout_parse_policy(void *timeouts, struct nf_conntrack_l4proto *l4proto,
                struct nlattr *tb[l4proto->ctnl_timeout.nlattr_max+1];
 
                ret = nla_parse_nested(tb, l4proto->ctnl_timeout.nlattr_max,
-                                      attr, l4proto->ctnl_timeout.nla_policy);
+                                      attr, l4proto->ctnl_timeout.nla_policy,
+                                      NULL);
                if (ret < 0)
                        return ret;
 
index 933509ebf3d3e2e84aecd55fd7f19f21f69e46d4..3be6fef30581593c9dde59030ac33af6249abcba 100644 (file)
@@ -1109,7 +1109,7 @@ static int nfqa_parse_bridge(struct nf_queue_entry *entry,
                int err;
 
                err = nla_parse_nested(tb, NFQA_VLAN_MAX, nfqa[NFQA_VLAN],
-                                      nfqa_vlan_policy);
+                                      nfqa_vlan_policy, NULL);
                if (err < 0)
                        return err;
 
index fab6bf3f955ed0a9251b4dfc72b41e5948fa4a21..d76d0f36799f60d5ccb40449b029be2c87652b6e 100644 (file)
@@ -200,7 +200,7 @@ static int nft_parse_compat(const struct nlattr *attr, u16 *proto, bool *inv)
        int err;
 
        err = nla_parse_nested(tb, NFTA_RULE_COMPAT_MAX, attr,
-                              nft_rule_compat_policy);
+                              nft_rule_compat_policy, NULL);
        if (err < 0)
                return err;
 
index 4149d3e6358976f093dbcb25dee79d10f6275231..9aacf2da3d98feaf94319f7315b255323f4416f2 100644 (file)
@@ -101,7 +101,7 @@ static int netlbl_cipsov4_add_common(struct genl_info *info,
 
        if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_TAGLST],
                                NLBL_CIPSOV4_A_MAX,
-                               netlbl_cipsov4_genl_policy) != 0)
+                               netlbl_cipsov4_genl_policy, NULL) != 0)
                return -EINVAL;
 
        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,
 
        if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSLVLLST],
                                NLBL_CIPSOV4_A_MAX,
-                               netlbl_cipsov4_genl_policy) != 0)
+                               netlbl_cipsov4_genl_policy, NULL) != 0)
                return -EINVAL;
 
        doi_def = kmalloc(sizeof(*doi_def), GFP_KERNEL);
@@ -170,10 +170,10 @@ static int netlbl_cipsov4_add_std(struct genl_info *info,
                            info->attrs[NLBL_CIPSOV4_A_MLSLVLLST],
                            nla_a_rem)
                if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSLVL) {
-                       if (nla_validate_nested(nla_a,
-                                           NLBL_CIPSOV4_A_MAX,
-                                           netlbl_cipsov4_genl_policy) != 0)
-                                       goto add_std_failure;
+                       if (nla_validate_nested(nla_a, NLBL_CIPSOV4_A_MAX,
+                                               netlbl_cipsov4_genl_policy,
+                                               NULL) != 0)
+                               goto add_std_failure;
                        nla_for_each_nested(nla_b, nla_a, nla_b_rem)
                                switch (nla_type(nla_b)) {
                                case NLBL_CIPSOV4_A_MLSLVLLOC:
@@ -236,7 +236,7 @@ static int netlbl_cipsov4_add_std(struct genl_info *info,
        if (info->attrs[NLBL_CIPSOV4_A_MLSCATLST]) {
                if (nla_validate_nested(info->attrs[NLBL_CIPSOV4_A_MLSCATLST],
                                        NLBL_CIPSOV4_A_MAX,
-                                       netlbl_cipsov4_genl_policy) != 0)
+                                       netlbl_cipsov4_genl_policy, NULL) != 0)
                        goto add_std_failure;
 
                nla_for_each_nested(nla_a,
@@ -244,8 +244,9 @@ static int netlbl_cipsov4_add_std(struct genl_info *info,
                                    nla_a_rem)
                        if (nla_type(nla_a) == NLBL_CIPSOV4_A_MLSCAT) {
                                if (nla_validate_nested(nla_a,
-                                             NLBL_CIPSOV4_A_MAX,
-                                             netlbl_cipsov4_genl_policy) != 0)
+                                                       NLBL_CIPSOV4_A_MAX,
+                                                       netlbl_cipsov4_genl_policy,
+                                                       NULL) != 0)
                                        goto add_std_failure;
                                nla_for_each_nested(nla_b, nla_a, nla_b_rem)
                                        switch (nla_type(nla_b)) {
index 4b598a5999a214200242863105139e2df2b67d86..ff6db5e66eb57f6c7d21d1530c3f8980d24886fa 100644 (file)
@@ -574,7 +574,7 @@ static int genl_family_rcv_msg(const struct genl_family *family,
 
        if (attrbuf) {
                err = nlmsg_parse(nlh, hdrlen, attrbuf, family->maxattr,
-                                 ops->policy);
+                                 ops->policy, NULL);
                if (err < 0)
                        goto out;
        }
index 03f3d5c7beb8d173fae25456b278ee9cf3e04c5e..aca903c126713b36b51f33fed3ce5960727ba130 100644 (file)
@@ -119,7 +119,8 @@ static struct nfc_dev *__get_device_from_cb(struct netlink_callback *cb)
        u32 idx;
 
        rc = nlmsg_parse(cb->nlh, GENL_HDRLEN + nfc_genl_family.hdrsize,
-                        attrbuf, nfc_genl_family.maxattr, nfc_genl_policy);
+                        attrbuf, nfc_genl_family.maxattr, nfc_genl_policy,
+                        NULL);
        if (rc < 0)
                return ERR_PTR(rc);
 
@@ -1161,7 +1162,7 @@ static int nfc_genl_llc_sdreq(struct sk_buff *skb, struct genl_info *info)
 
        nla_for_each_nested(attr, info->attrs[NFC_ATTR_LLC_SDP], rem) {
                rc = nla_parse_nested(sdp_attrs, NFC_SDP_ATTR_MAX, attr,
-                                     nfc_sdp_genl_policy);
+                                     nfc_sdp_genl_policy, NULL);
 
                if (rc != 0) {
                        rc = -EINVAL;
index 9c62b6325f7adc92420b605cf4cdc3b26da437fc..7b17da9a94a0c15ab8ec28205e025d9554c798fb 100644 (file)
@@ -1353,7 +1353,7 @@ static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
        int err;
 
        err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a,
-                           OVS_FLOW_ATTR_MAX, flow_policy);
+                           OVS_FLOW_ATTR_MAX, flow_policy, NULL);
        if (err)
                return err;
        ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]);
index df82b81a9b357250b725b47660dc211ea9e957ae..7e1d8a2afa63687aeb87121dbae614bad2ec34a3 100644 (file)
@@ -2427,8 +2427,8 @@ static int validate_userspace(const struct nlattr *attr)
        struct nlattr *a[OVS_USERSPACE_ATTR_MAX + 1];
        int error;
 
-       error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX,
-                                attr, userspace_policy);
+       error = nla_parse_nested(a, OVS_USERSPACE_ATTR_MAX, attr,
+                                userspace_policy, NULL);
        if (error)
                return error;
 
index 7eb955e453e6d657d13d0aa7b35ce7c8b7de2f15..869acb3b3d3f25a75ee4912359ee0fea31fa7c2d 100644 (file)
@@ -70,7 +70,8 @@ static int vxlan_configure_exts(struct vport *vport, struct nlattr *attr,
        if (nla_len(attr) < sizeof(struct nlattr))
                return -EINVAL;
 
-       err = nla_parse_nested(exts, OVS_VXLAN_EXT_MAX, attr, exts_policy);
+       err = nla_parse_nested(exts, OVS_VXLAN_EXT_MAX, attr, exts_policy,
+                              NULL);
        if (err < 0)
                return err;
 
index bc5ee5fbe6ae3845b6ec67eaea2beaec2d12ba08..363799bf97f661e0a2f724b1e74aa1560e3c5650 100644 (file)
@@ -78,7 +78,8 @@ static int addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
 
        ASSERT_RTNL();
 
-       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy);
+       err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_phonet_policy,
+                         NULL);
        if (err < 0)
                return err;
 
@@ -243,7 +244,8 @@ static int route_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
 
        ASSERT_RTNL();
 
-       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_phonet_policy);
+       err = nlmsg_parse(nlh, sizeof(*rtm), tb, RTA_MAX, rtm_phonet_policy,
+                         NULL);
        if (err < 0)
                return err;
 
index ae5ac175b2bef96ffa614bc799db5cd90a7bdc08..7fdbb34002f5d836cdc886d0be6d251527aa490a 100644 (file)
@@ -957,7 +957,7 @@ static int qrtr_addr_doit(struct sk_buff *skb, struct nlmsghdr *nlh)
 
        ASSERT_RTNL();
 
-       rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy);
+       rc = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, qrtr_policy, NULL);
        if (rc < 0)
                return rc;
 
index b70aa57319ea3233395dc7ae349b8b7aab5dfd03..79d875c6e8a053158064d2387b22a81a079e79e1 100644 (file)
@@ -557,7 +557,7 @@ struct tc_action *tcf_action_init_1(struct net *net, struct nlattr *nla,
        int err;
 
        if (name == NULL) {
-               err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL);
+               err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL, NULL);
                if (err < 0)
                        goto err_out;
                err = -EINVAL;
@@ -654,7 +654,7 @@ int tcf_action_init(struct net *net, struct nlattr *nla, struct nlattr *est,
        int err;
        int i;
 
-       err = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL);
+       err = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL, NULL);
        if (err < 0)
                return err;
 
@@ -786,7 +786,7 @@ static struct tc_action *tcf_action_get_1(struct net *net, struct nlattr *nla,
        int index;
        int err;
 
-       err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL);
+       err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL, NULL);
        if (err < 0)
                goto err_out;
 
@@ -835,7 +835,7 @@ static int tca_action_flush(struct net *net, struct nlattr *nla,
 
        b = skb_tail_pointer(skb);
 
-       err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL);
+       err = nla_parse_nested(tb, TCA_ACT_MAX, nla, NULL, NULL);
        if (err < 0)
                goto err_out;
 
@@ -921,7 +921,7 @@ tca_action_gd(struct net *net, struct nlattr *nla, struct nlmsghdr *n,
        struct tc_action *act;
        LIST_HEAD(actions);
 
-       ret = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL);
+       ret = nla_parse_nested(tb, TCA_ACT_MAX_PRIO, nla, NULL, NULL);
        if (ret < 0)
                return ret;
 
@@ -1004,7 +1004,8 @@ static int tc_ctl_action(struct sk_buff *skb, struct nlmsghdr *n)
            !netlink_capable(skb, CAP_NET_ADMIN))
                return -EPERM;
 
-       ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL);
+       ret = nlmsg_parse(n, sizeof(struct tcamsg), tca, TCA_ACT_MAX, NULL,
+                         NULL);
        if (ret < 0)
                return ret;
 
@@ -1051,19 +1052,20 @@ static struct nlattr *find_dump_kind(const struct nlmsghdr *n)
        struct nlattr *nla[TCAA_MAX + 1];
        struct nlattr *kind;
 
-       if (nlmsg_parse(n, sizeof(struct tcamsg), nla, TCAA_MAX, NULL) < 0)
+       if (nlmsg_parse(n, sizeof(struct tcamsg), nla, TCAA_MAX,
+                       NULL, NULL) < 0)
                return NULL;
        tb1 = nla[TCA_ACT_TAB];
        if (tb1 == NULL)
                return NULL;
 
        if (nla_parse(tb, TCA_ACT_MAX_PRIO, nla_data(tb1),
-                     NLMSG_ALIGN(nla_len(tb1)), NULL) < 0)
+                     NLMSG_ALIGN(nla_len(tb1)), NULL, NULL) < 0)
                return NULL;
 
        if (tb[1] == NULL)
                return NULL;
-       if (nla_parse_nested(tb2, TCA_ACT_MAX, tb[1], NULL) < 0)
+       if (nla_parse_nested(tb2, TCA_ACT_MAX, tb[1], NULL, NULL) < 0)
                return NULL;
        kind = tb2[TCA_ACT_KIND];
 
index 520baa41cba3a8d24a659b67c5a5ed8a44129f37..d33947d6e9d017a05b704d233ec97f73abb2ab74 100644 (file)
@@ -283,7 +283,7 @@ static int tcf_bpf_init(struct net *net, struct nlattr *nla,
        if (!nla)
                return -EINVAL;
 
-       ret = nla_parse_nested(tb, TCA_ACT_BPF_MAX, nla, act_bpf_policy);
+       ret = nla_parse_nested(tb, TCA_ACT_BPF_MAX, nla, act_bpf_policy, NULL);
        if (ret < 0)
                return ret;
 
index f9bb43c25697e70d18fe9bbba90f6e98dfe05759..2155bc6c6a1e79049de9dc9c8e611b592e42a77f 100644 (file)
@@ -109,7 +109,8 @@ static int tcf_connmark_init(struct net *net, struct nlattr *nla,
        if (!nla)
                return -EINVAL;
 
-       ret = nla_parse_nested(tb, TCA_CONNMARK_MAX, nla, connmark_policy);
+       ret = nla_parse_nested(tb, TCA_CONNMARK_MAX, nla, connmark_policy,
+                              NULL);
        if (ret < 0)
                return ret;
 
index 6c319a40c1cc744734bd8d82b5d0c5baec26bbbc..ab6fdbd34db774bdb9d8a958ead2c808a3405d13 100644 (file)
@@ -59,7 +59,7 @@ static int tcf_csum_init(struct net *net, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_CSUM_MAX, nla, csum_policy);
+       err = nla_parse_nested(tb, TCA_CSUM_MAX, nla, csum_policy, NULL);
        if (err < 0)
                return err;
 
index e6c874a2b283f6e265b61a39f1fcd053389b9051..99afe8b1f1fb015584f303e7352da8b6171774eb 100644 (file)
@@ -73,7 +73,7 @@ static int tcf_gact_init(struct net *net, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_GACT_MAX, nla, gact_policy);
+       err = nla_parse_nested(tb, TCA_GACT_MAX, nla, gact_policy, NULL);
        if (err < 0)
                return err;
 
index c75ea5c9102c50f5810b52bf7b1d0e42a7acdfd2..c5dec308b8b1eb29505fed1b9a71b3ef70f5e91a 100644 (file)
@@ -443,7 +443,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
        int ret = 0;
        int err;
 
-       err = nla_parse_nested(tb, TCA_IFE_MAX, nla, ife_policy);
+       err = nla_parse_nested(tb, TCA_IFE_MAX, nla, ife_policy, NULL);
        if (err < 0)
                return err;
 
@@ -514,7 +514,7 @@ static int tcf_ife_init(struct net *net, struct nlattr *nla,
 
        if (tb[TCA_IFE_METALST]) {
                err = nla_parse_nested(tb2, IFE_META_MAX, tb[TCA_IFE_METALST],
-                                      NULL);
+                                      NULL, NULL);
                if (err) {
 metadata_parse_err:
                        if (exists)
index 992ef8d624f11819e032411e72ea60aa6aa93ba1..36f0ced9e60c03297e195135ca5a8a53d1a3a27b 100644 (file)
@@ -107,7 +107,7 @@ static int __tcf_ipt_init(struct tc_action_net *tn, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_IPT_MAX, nla, ipt_policy);
+       err = nla_parse_nested(tb, TCA_IPT_MAX, nla, ipt_policy, NULL);
        if (err < 0)
                return err;
 
index af49c7dca8608cebbaa0224976ae7df104e5526f..1b5549ababd4690617b5ff0c3842c6cbb4806a41 100644 (file)
@@ -87,7 +87,7 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
 
        if (nla == NULL)
                return -EINVAL;
-       ret = nla_parse_nested(tb, TCA_MIRRED_MAX, nla, mirred_policy);
+       ret = nla_parse_nested(tb, TCA_MIRRED_MAX, nla, mirred_policy, NULL);
        if (ret < 0)
                return ret;
        if (tb[TCA_MIRRED_PARMS] == NULL)
index 9b6aec665495992fd6d63773890b5e897ba51819..9016ab8a0649780a02d8b29f76f98f19c0283e11 100644 (file)
@@ -50,7 +50,7 @@ static int tcf_nat_init(struct net *net, struct nlattr *nla, struct nlattr *est,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_NAT_MAX, nla, nat_policy);
+       err = nla_parse_nested(tb, TCA_NAT_MAX, nla, nat_policy, NULL);
        if (err < 0)
                return err;
 
index c1310472f620fd44b9ae8a6cfeefef5419cad54e..164b5ac094be6d8bbd7a04aa8aa962a3c693ab44 100644 (file)
@@ -72,7 +72,7 @@ static struct tcf_pedit_key_ex *tcf_pedit_keys_ex_parse(struct nlattr *nla,
                }
 
                err = nla_parse_nested(tb, TCA_PEDIT_KEY_EX_MAX, ka,
-                                      pedit_key_ex_policy);
+                                      pedit_key_ex_policy, NULL);
                if (err)
                        goto err_out;
 
@@ -147,7 +147,7 @@ static int tcf_pedit_init(struct net *net, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_PEDIT_MAX, nla, pedit_policy);
+       err = nla_parse_nested(tb, TCA_PEDIT_MAX, nla, pedit_policy, NULL);
        if (err < 0)
                return err;
 
index 0ba91d1ce99480c4817684dbe0b4fde61811e03e..f42008b293112d1a6da2bcf6ef8af564b382ba39 100644 (file)
@@ -90,7 +90,7 @@ static int tcf_act_police_init(struct net *net, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_POLICE_MAX, nla, police_policy);
+       err = nla_parse_nested(tb, TCA_POLICE_MAX, nla, police_policy, NULL);
        if (err < 0)
                return err;
 
index 0b8217b4763f59d2d4a71684080536b080ab27e1..59d6645a4007818656376b02a9c5a458e028420b 100644 (file)
@@ -50,7 +50,7 @@ static int tcf_sample_init(struct net *net, struct nlattr *nla,
 
        if (!nla)
                return -EINVAL;
-       ret = nla_parse_nested(tb, TCA_SAMPLE_MAX, nla, sample_policy);
+       ret = nla_parse_nested(tb, TCA_SAMPLE_MAX, nla, sample_policy, NULL);
        if (ret < 0)
                return ret;
        if (!tb[TCA_SAMPLE_PARMS] || !tb[TCA_SAMPLE_RATE] ||
index 823a73ad0c602b8e079be04934f8a57d53480da1..43605e7ce05107adb79bd1dbc562f4961eb20e51 100644 (file)
@@ -94,7 +94,7 @@ static int tcf_simp_init(struct net *net, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_DEF_MAX, nla, simple_policy);
+       err = nla_parse_nested(tb, TCA_DEF_MAX, nla, simple_policy, NULL);
        if (err < 0)
                return err;
 
index 06ccae3c12eecf85383105489320537d52c4d948..6b3e65d7de0c2e81240618e4500ee894819df833 100644 (file)
@@ -82,7 +82,7 @@ static int tcf_skbedit_init(struct net *net, struct nlattr *nla,
        if (nla == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_SKBEDIT_MAX, nla, skbedit_policy);
+       err = nla_parse_nested(tb, TCA_SKBEDIT_MAX, nla, skbedit_policy, NULL);
        if (err < 0)
                return err;
 
index c736627f8f4a0e0ff86db535ec95459a417e4ada..a73c4bbcada293b2923a41572104d6f9362d37d9 100644 (file)
@@ -103,7 +103,7 @@ static int tcf_skbmod_init(struct net *net, struct nlattr *nla,
        if (!nla)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_SKBMOD_MAX, nla, skbmod_policy);
+       err = nla_parse_nested(tb, TCA_SKBMOD_MAX, nla, skbmod_policy, NULL);
        if (err < 0)
                return err;
 
index e3a58e02119877d237f9aa18c5f9d9fdfb44d0c9..b9a2f241a5b3adca04a5d162569f7908c01c2912 100644 (file)
@@ -89,7 +89,8 @@ static int tunnel_key_init(struct net *net, struct nlattr *nla,
        if (!nla)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_TUNNEL_KEY_MAX, nla, tunnel_key_policy);
+       err = nla_parse_nested(tb, TCA_TUNNEL_KEY_MAX, nla, tunnel_key_policy,
+                              NULL);
        if (err < 0)
                return err;
 
index 19e0dba305ce8101d9db33ff0a1eaab849a730d0..13ba3a89f675d7d5ddaeab893a9d548be735e39e 100644 (file)
@@ -121,7 +121,7 @@ static int tcf_vlan_init(struct net *net, struct nlattr *nla,
        if (!nla)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_VLAN_MAX, nla, vlan_policy);
+       err = nla_parse_nested(tb, TCA_VLAN_MAX, nla, vlan_policy, NULL);
        if (err < 0)
                return err;
 
index 732f7cae459d4656aa8d69020f44a66abb501f34..e2c68c30f97d87a532fea6712c8b0a1a9987ea33 100644 (file)
@@ -229,7 +229,7 @@ static int tc_ctl_tfilter(struct sk_buff *skb, struct nlmsghdr *n)
 replay:
        tp_created = 0;
 
-       err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL);
+       err = nlmsg_parse(n, sizeof(*t), tca, TCA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
index 5877f6061b57589ce9ba9226281e85f47eafb523..422414f16b386814badb1a3cc97ead3a38ed3503 100644 (file)
@@ -174,7 +174,7 @@ static int basic_change(struct net *net, struct sk_buff *in_skb,
                return -EINVAL;
 
        err = nla_parse_nested(tb, TCA_BASIC_MAX, tca[TCA_OPTIONS],
-                              basic_policy);
+                              basic_policy, NULL);
        if (err < 0)
                return err;
 
index 80f688436dd70bae84f0c2fffd3d16c4b1d2c4da..7ddd08efaa0f8dfdb40690e9e73d0cc2543dbd22 100644 (file)
@@ -478,7 +478,8 @@ static int cls_bpf_change(struct net *net, struct sk_buff *in_skb,
        if (tca[TCA_OPTIONS] == NULL)
                return -EINVAL;
 
-       ret = nla_parse_nested(tb, TCA_BPF_MAX, tca[TCA_OPTIONS], bpf_policy);
+       ret = nla_parse_nested(tb, TCA_BPF_MAX, tca[TCA_OPTIONS], bpf_policy,
+                              NULL);
        if (ret < 0)
                return ret;
 
index c1f20077837f06bb1998f5621c797e575e10ca21..b5e7c1bee6c3cc90d3a07bd1d09619d8875d2c17 100644 (file)
@@ -99,7 +99,7 @@ static int cls_cgroup_change(struct net *net, struct sk_buff *in_skb,
        new->handle = handle;
        new->tp = tp;
        err = nla_parse_nested(tb, TCA_CGROUP_MAX, tca[TCA_OPTIONS],
-                              cgroup_policy);
+                              cgroup_policy, NULL);
        if (err < 0)
                goto errout;
 
index ca193af8634ad71a80e490c4ce916c4cedfd543f..008ba7e63b7a110b75e9dd8264aa676aea4a3e95 100644 (file)
@@ -400,7 +400,7 @@ static int flow_change(struct net *net, struct sk_buff *in_skb,
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_FLOW_MAX, opt, flow_policy);
+       err = nla_parse_nested(tb, TCA_FLOW_MAX, opt, flow_policy, NULL);
        if (err < 0)
                return err;
 
index 9d0c99d2e9fbcc35aee5a51274cf9fe7f542a14f..3e7bd7801aa8c3a06824f817dc8980c47d1d762b 100644 (file)
@@ -848,7 +848,8 @@ static int fl_change(struct net *net, struct sk_buff *in_skb,
        if (!tb)
                return -ENOBUFS;
 
-       err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS], fl_policy);
+       err = nla_parse_nested(tb, TCA_FLOWER_MAX, tca[TCA_OPTIONS],
+                              fl_policy, NULL);
        if (err < 0)
                goto errout_tb;
 
index 9dc63d54e1672e82cfae5f677a1ba811c72df337..996209083c6b315f3bc8bf776f695423bae7d741 100644 (file)
@@ -250,7 +250,7 @@ static int fw_change(struct net *net, struct sk_buff *in_skb,
        if (!opt)
                return handle ? -EINVAL : 0; /* Succeed if it is old method. */
 
-       err = nla_parse_nested(tb, TCA_FW_MAX, opt, fw_policy);
+       err = nla_parse_nested(tb, TCA_FW_MAX, opt, fw_policy, NULL);
        if (err < 0)
                return err;
 
index 224eb2c143462a39f3a05e78203344e44e6eb578..0dbcca62aa6a78ec99302fd79fdee26b2cd4a8d4 100644 (file)
@@ -161,8 +161,8 @@ static int mall_change(struct net *net, struct sk_buff *in_skb,
        if (head)
                return -EEXIST;
 
-       err = nla_parse_nested(tb, TCA_MATCHALL_MAX,
-                              tca[TCA_OPTIONS], mall_policy);
+       err = nla_parse_nested(tb, TCA_MATCHALL_MAX, tca[TCA_OPTIONS],
+                              mall_policy, NULL);
        if (err < 0)
                return err;
 
index 455fc8f83d0ae0ab48ba97fc2a11ce99e8e00784..a371075c1d7a5e5dece3ad3a06a9bf8cf8bfd208 100644 (file)
@@ -489,7 +489,7 @@ static int route4_change(struct net *net, struct sk_buff *in_skb,
        if (opt == NULL)
                return handle ? -EINVAL : 0;
 
-       err = nla_parse_nested(tb, TCA_ROUTE4_MAX, opt, route4_policy);
+       err = nla_parse_nested(tb, TCA_ROUTE4_MAX, opt, route4_policy, NULL);
        if (err < 0)
                return err;
 
index 322438fb3ffcb426194be6c1dd05893b27cdf51c..d7f2923e6ebdd21a00fda19a9329bfcb2f87b331 100644 (file)
@@ -484,7 +484,7 @@ static int rsvp_change(struct net *net, struct sk_buff *in_skb,
        if (opt == NULL)
                return handle ? -EINVAL : 0;
 
-       err = nla_parse_nested(tb, TCA_RSVP_MAX, opt, rsvp_policy);
+       err = nla_parse_nested(tb, TCA_RSVP_MAX, opt, rsvp_policy, NULL);
        if (err < 0)
                return err;
 
index 0751245a6aced60163601b94ab1386e0c5e30565..2ab001361457840440d548aa0f6c08fd0597df40 100644 (file)
@@ -482,7 +482,7 @@ tcindex_change(struct net *net, struct sk_buff *in_skb,
        if (!opt)
                return 0;
 
-       err = nla_parse_nested(tb, TCA_TCINDEX_MAX, opt, tcindex_policy);
+       err = nla_parse_nested(tb, TCA_TCINDEX_MAX, opt, tcindex_policy, NULL);
        if (err < 0)
                return err;
 
index 4dbe0c680fe6363a88ca47cb167dcae9327920d1..9e2f330ac80fc769ffe9b760a4afe113d58c47ac 100644 (file)
@@ -860,7 +860,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb,
        if (opt == NULL)
                return handle ? -EINVAL : 0;
 
-       err = nla_parse_nested(tb, TCA_U32_MAX, opt, u32_policy);
+       err = nla_parse_nested(tb, TCA_U32_MAX, opt, u32_policy, NULL);
        if (err < 0)
                return err;
 
index ae7e4f5b348b86ad352e0011c8e0d0227a44f1e3..eb0e9bab54c175d706b6f89f354f2dd5b8793a50 100644 (file)
@@ -912,7 +912,7 @@ static int em_meta_change(struct net *net, void *data, int len,
        struct tcf_meta_hdr *hdr;
        struct meta_match *meta = NULL;
 
-       err = nla_parse(tb, TCA_EM_META_MAX, data, len, meta_policy);
+       err = nla_parse(tb, TCA_EM_META_MAX, data, len, meta_policy, NULL);
        if (err < 0)
                goto errout;
 
index fbb7ebfc58c6761f6afb58e62646908b10e2bf09..03b677bc07005c7f864077edad6f22ca9dadbfdd 100644 (file)
@@ -314,7 +314,7 @@ int tcf_em_tree_validate(struct tcf_proto *tp, struct nlattr *nla,
        if (!nla)
                return 0;
 
-       err = nla_parse_nested(tb, TCA_EMATCH_TREE_MAX, nla, em_policy);
+       err = nla_parse_nested(tb, TCA_EMATCH_TREE_MAX, nla, em_policy, NULL);
        if (err < 0)
                goto errout;
 
index 62567bfe52c723262a291360cecd572fefced164..fcb5ae581c0405d79367312871a34e91a90729e6 100644 (file)
@@ -457,7 +457,7 @@ static struct qdisc_size_table *qdisc_get_stab(struct nlattr *opt)
        u16 *tab = NULL;
        int err;
 
-       err = nla_parse_nested(tb, TCA_STAB_MAX, opt, stab_policy);
+       err = nla_parse_nested(tb, TCA_STAB_MAX, opt, stab_policy, NULL);
        if (err < 0)
                return ERR_PTR(err);
        if (!tb[TCA_STAB_BASE])
@@ -1131,7 +1131,7 @@ static int tc_get_qdisc(struct sk_buff *skb, struct nlmsghdr *n)
            !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN))
                return -EPERM;
 
-       err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL);
+       err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
@@ -1200,7 +1200,7 @@ static int tc_modify_qdisc(struct sk_buff *skb, struct nlmsghdr *n)
 
 replay:
        /* Reinit, just in case something touches this. */
-       err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL);
+       err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
@@ -1515,7 +1515,7 @@ static int tc_dump_qdisc(struct sk_buff *skb, struct netlink_callback *cb)
        idx = 0;
        ASSERT_RTNL();
 
-       err = nlmsg_parse(nlh, sizeof(*tcm), tca, TCA_MAX, NULL);
+       err = nlmsg_parse(nlh, sizeof(*tcm), tca, TCA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
@@ -1577,7 +1577,7 @@ static int tc_ctl_tclass(struct sk_buff *skb, struct nlmsghdr *n)
            !netlink_ns_capable(skb, net->user_ns, CAP_NET_ADMIN))
                return -EPERM;
 
-       err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL);
+       err = nlmsg_parse(n, sizeof(*tcm), tca, TCA_MAX, NULL, NULL);
        if (err < 0)
                return err;
 
index 2209c2ddacbfb0b1f222cb593477891d7124d9e3..40cbceed4de82aa58d70c2c67782fc65088b25c5 100644 (file)
@@ -214,7 +214,7 @@ static int atm_tc_change(struct Qdisc *sch, u32 classid, u32 parent,
        if (opt == NULL)
                return -EINVAL;
 
-       error = nla_parse_nested(tb, TCA_ATM_MAX, opt, atm_policy);
+       error = nla_parse_nested(tb, TCA_ATM_MAX, opt, atm_policy, NULL);
        if (error < 0)
                return error;
 
index cf93e5ff3d630e50442d65b5440883fb8467e6a0..7415859fd4c3f65e6ff801b08d683b796d1eaa03 100644 (file)
@@ -1137,7 +1137,7 @@ static int cbq_init(struct Qdisc *sch, struct nlattr *opt)
        struct tc_ratespec *r;
        int err;
 
-       err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy);
+       err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, NULL);
        if (err < 0)
                return err;
 
@@ -1474,7 +1474,7 @@ cbq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, struct nlattr **t
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy);
+       err = nla_parse_nested(tb, TCA_CBQ_MAX, opt, cbq_policy, NULL);
        if (err < 0)
                return err;
 
index 593183a5b5b59013bfe7c59ce9e143879b793c4c..d00f4c7c2f3af980b82281485e6fb31006765e92 100644 (file)
@@ -357,7 +357,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_CHOKE_MAX, opt, choke_policy);
+       err = nla_parse_nested(tb, TCA_CHOKE_MAX, opt, choke_policy, NULL);
        if (err < 0)
                return err;
 
index 5bfa79ee657cf3674d2b6204aee80f63207b84f9..c518a1efcb9d3bd98d1de0d921bd250ed46bc69c 100644 (file)
@@ -140,7 +140,7 @@ static int codel_change(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_CODEL_MAX, opt, codel_policy);
+       err = nla_parse_nested(tb, TCA_CODEL_MAX, opt, codel_policy, NULL);
        if (err < 0)
                return err;
 
index 9fe67e257dfa8a52b38142a9269fe363616e1187..58a8c32eab2394f90e5935ad661b6223afee106b 100644 (file)
@@ -76,7 +76,7 @@ static int drr_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_DRR_MAX, opt, drr_policy);
+       err = nla_parse_nested(tb, TCA_DRR_MAX, opt, drr_policy, NULL);
        if (err < 0)
                return err;
 
index cfa1f2cdbaf73120bdb98abd109c4c3ff7723ab4..1c0f877f673a73977d3191a78a2964e6c1d41259 100644 (file)
@@ -129,7 +129,7 @@ static int dsmark_change(struct Qdisc *sch, u32 classid, u32 parent,
        if (!opt)
                goto errout;
 
-       err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy);
+       err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy, NULL);
        if (err < 0)
                goto errout;
 
@@ -342,7 +342,7 @@ static int dsmark_init(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                goto errout;
 
-       err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy);
+       err = nla_parse_nested(tb, TCA_DSMARK_MAX, opt, dsmark_policy, NULL);
        if (err < 0)
                goto errout;
 
index a4f738ac77283b19927aef0a0e6c9fc8dafcdd42..da4f67bda0ee148910cc79a7d64cdf85ce318beb 100644 (file)
@@ -698,7 +698,7 @@ static int fq_change(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_FQ_MAX, opt, fq_policy);
+       err = nla_parse_nested(tb, TCA_FQ_MAX, opt, fq_policy, NULL);
        if (err < 0)
                return err;
 
index 097bbe9857a55f9ce3b41d07a834c197639469d1..18bbb5476c836128dae1779c7b493cbb5c485e14 100644 (file)
@@ -383,7 +383,8 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_FQ_CODEL_MAX, opt, fq_codel_policy);
+       err = nla_parse_nested(tb, TCA_FQ_CODEL_MAX, opt, fq_codel_policy,
+                              NULL);
        if (err < 0)
                return err;
        if (tb[TCA_FQ_CODEL_FLOWS]) {
index c78a093c551ae84a0ba5ba13a7af9cc89e2ca383..17c7130454bd90e8af1d17e95f477ea558fb481d 100644 (file)
@@ -401,7 +401,7 @@ static int gred_change(struct Qdisc *sch, struct nlattr *opt)
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy);
+       err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy, NULL);
        if (err < 0)
                return err;
 
@@ -470,7 +470,7 @@ static int gred_init(struct Qdisc *sch, struct nlattr *opt)
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy);
+       err = nla_parse_nested(tb, TCA_GRED_MAX, opt, gred_policy, NULL);
        if (err < 0)
                return err;
 
index 0198c6cdda4973a0e4d9ac96e1c10c242d0954e9..5cb82f6c1b0605d7a4373062dc4232e14347bc22 100644 (file)
@@ -957,7 +957,7 @@ hfsc_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_HFSC_MAX, opt, hfsc_policy);
+       err = nla_parse_nested(tb, TCA_HFSC_MAX, opt, hfsc_policy, NULL);
        if (err < 0)
                return err;
 
index 2fae8b5f1b80c017c4ae60df54c9143f82de4e9d..c19d346e6c5a438c051abf8ce4eb785d075d36c2 100644 (file)
@@ -529,7 +529,7 @@ static int hhf_change(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_HHF_MAX, opt, hhf_policy);
+       err = nla_parse_nested(tb, TCA_HHF_MAX, opt, hhf_policy, NULL);
        if (err < 0)
                return err;
 
index 95867033542ec4c889e3c1e7ebd266700aafbef7..570ef3b0c09b7abe49da4787b668397d4413f0e8 100644 (file)
@@ -1017,7 +1017,7 @@ static int htb_init(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy);
+       err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy, NULL);
        if (err < 0)
                return err;
 
@@ -1342,7 +1342,7 @@ static int htb_change_class(struct Qdisc *sch, u32 classid,
        if (!opt)
                goto failure;
 
-       err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy);
+       err = nla_parse_nested(tb, TCA_HTB_MAX, opt, htb_policy, NULL);
        if (err < 0)
                goto failure;
 
index 94b4928ad4134b25e0a28baf1aaa4879b18f56c0..f0ce4780f395c50683fbbd070c8fa3cb7eede7ec 100644 (file)
@@ -843,7 +843,7 @@ static int parse_attr(struct nlattr *tb[], int maxtype, struct nlattr *nla,
 
        if (nested_len >= nla_attr_size(0))
                return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len),
-                                nested_len, policy);
+                                nested_len, policy, NULL);
 
        memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
        return 0;
index 5c3a99d6aa82ae0dcfd71ebceaae8de5d943e352..6c2791d6102dae67fe006b17723d6f50edc07885 100644 (file)
@@ -190,7 +190,7 @@ static int pie_change(struct Qdisc *sch, struct nlattr *opt)
        if (!opt)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_PIE_MAX, opt, pie_policy);
+       err = nla_parse_nested(tb, TCA_PIE_MAX, opt, pie_policy, NULL);
        if (err < 0)
                return err;
 
index 6c85f3e9239bbc2b127ca7b7e61826de3b57873c..041eba3006ccdd84e1ea1419443f1d169550ceb5 100644 (file)
@@ -418,7 +418,8 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid,
                return -EINVAL;
        }
 
-       err = nla_parse_nested(tb, TCA_QFQ_MAX, tca[TCA_OPTIONS], qfq_policy);
+       err = nla_parse_nested(tb, TCA_QFQ_MAX, tca[TCA_OPTIONS], qfq_policy,
+                              NULL);
        if (err < 0)
                return err;
 
index 799ea6dd69b266ccb25d52abab68116e3508b3cb..11292adce4121022a86aff0aed537be3d9319490 100644 (file)
@@ -173,7 +173,7 @@ static int red_change(struct Qdisc *sch, struct nlattr *opt)
        if (opt == NULL)
                return -EINVAL;
 
-       err = nla_parse_nested(tb, TCA_RED_MAX, opt, red_policy);
+       err = nla_parse_nested(tb, TCA_RED_MAX, opt, red_policy, NULL);
        if (err < 0)
                return err;
 
index ae862f172c944283be1cbb56f971cf821cd12bf8..0f777273ba293dcf2e62ae484dd0033bce942a2b 100644 (file)
@@ -495,7 +495,7 @@ static int sfb_change(struct Qdisc *sch, struct nlattr *opt)
        int err;
 
        if (opt) {
-               err = nla_parse_nested(tb, TCA_SFB_MAX, opt, sfb_policy);
+               err = nla_parse_nested(tb, TCA_SFB_MAX, opt, sfb_policy, NULL);
                if (err < 0)
                        return -EINVAL;
 
index 9850126129a378d46105d0535fde46e0a7f1a9c4..b2e4b6ad241a8e538c654ef4e8417ab756740a45 100644 (file)
@@ -315,7 +315,7 @@ static int tbf_change(struct Qdisc *sch, struct nlattr *opt)
        s64 buffer, mtu;
        u64 rate64 = 0, prate64 = 0;
 
-       err = nla_parse_nested(tb, TCA_TBF_MAX, opt, tbf_policy);
+       err = nla_parse_nested(tb, TCA_TBF_MAX, opt, tbf_policy, NULL);
        if (err < 0)
                return err;
 
index 017801f9dbaae28ff3bd411af3fce3a84da6c90d..8d40a7d31c9908c22b757fc0ab92bce436211c90 100644 (file)
@@ -826,7 +826,7 @@ static int switchdev_port_br_setlink_protinfo(struct net_device *dev,
        int err;
 
        err = nla_validate_nested(protinfo, IFLA_BRPORT_MAX,
-                                 switchdev_port_bridge_policy);
+                                 switchdev_port_bridge_policy, NULL);
        if (err)
                return err;
 
index 33a5bdfbef76c00578921198bfbbe9c735f643d2..9b5c45f48f607525cd59c0960e2e3649e8b8c16e 100644 (file)
@@ -802,7 +802,7 @@ int tipc_nl_bearer_get(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX,
                               info->attrs[TIPC_NLA_BEARER],
-                              tipc_nl_bearer_policy);
+                              tipc_nl_bearer_policy, NULL);
        if (err)
                return err;
 
@@ -851,7 +851,7 @@ int tipc_nl_bearer_disable(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX,
                               info->attrs[TIPC_NLA_BEARER],
-                              tipc_nl_bearer_policy);
+                              tipc_nl_bearer_policy, NULL);
        if (err)
                return err;
 
@@ -891,7 +891,7 @@ int tipc_nl_bearer_enable(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX,
                               info->attrs[TIPC_NLA_BEARER],
-                              tipc_nl_bearer_policy);
+                              tipc_nl_bearer_policy, NULL);
        if (err)
                return err;
 
@@ -939,7 +939,7 @@ int tipc_nl_bearer_add(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX,
                               info->attrs[TIPC_NLA_BEARER],
-                              tipc_nl_bearer_policy);
+                              tipc_nl_bearer_policy, NULL);
        if (err)
                return err;
 
@@ -982,7 +982,7 @@ int tipc_nl_bearer_set(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_BEARER_MAX,
                               info->attrs[TIPC_NLA_BEARER],
-                              tipc_nl_bearer_policy);
+                              tipc_nl_bearer_policy, NULL);
        if (err)
                return err;
 
@@ -1104,7 +1104,7 @@ int tipc_nl_media_get(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX,
                               info->attrs[TIPC_NLA_MEDIA],
-                              tipc_nl_media_policy);
+                              tipc_nl_media_policy, NULL);
        if (err)
                return err;
 
@@ -1152,7 +1152,7 @@ int tipc_nl_media_set(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_MEDIA_MAX,
                               info->attrs[TIPC_NLA_MEDIA],
-                              tipc_nl_media_policy);
+                              tipc_nl_media_policy, NULL);
 
        if (!attrs[TIPC_NLA_MEDIA_NAME])
                return -EINVAL;
index ddd2dd6f77aae1a5cd77c6bd86fac293db66e145..60820dc35a08ade9805080de4c15ff9819e150f5 100644 (file)
@@ -1827,7 +1827,7 @@ int tipc_nl_parse_link_prop(struct nlattr *prop, struct nlattr *props[])
        int err;
 
        err = nla_parse_nested(props, TIPC_NLA_PROP_MAX, prop,
-                              tipc_nl_prop_policy);
+                              tipc_nl_prop_policy, NULL);
        if (err)
                return err;
 
index ab8a2d5d1e3245d31f97375e5a27deda9a15ad58..836da66cd8522f60a25b880939e0b929886b5b2a 100644 (file)
@@ -211,8 +211,8 @@ int tipc_nl_net_set(struct sk_buff *skb, struct genl_info *info)
                return -EINVAL;
 
        err = nla_parse_nested(attrs, TIPC_NLA_NET_MAX,
-                              info->attrs[TIPC_NLA_NET],
-                              tipc_nl_net_policy);
+                              info->attrs[TIPC_NLA_NET], tipc_nl_net_policy,
+                              NULL);
        if (err)
                return err;
 
index 26ca8dd64ded64407db8ef885f8dbb6edd30e4b8..b76f13f6fea10a53d00ed14a38cdf5cdf7afa44c 100644 (file)
@@ -268,7 +268,8 @@ int tipc_nlmsg_parse(const struct nlmsghdr *nlh, struct nlattr ***attr)
        if (!*attr)
                return -EOPNOTSUPP;
 
-       return nlmsg_parse(nlh, GENL_HDRLEN, *attr, maxattr, tipc_nl_policy);
+       return nlmsg_parse(nlh, GENL_HDRLEN, *attr, maxattr, tipc_nl_policy,
+                          NULL);
 }
 
 int __init tipc_netlink_start(void)
index e1ae8a8a2b8eacf93224cc332fff4a537d8d1ab0..9bfe886ab33080f653ec1c39e0255b15709d0b76 100644 (file)
@@ -296,7 +296,7 @@ static int __tipc_nl_compat_doit(struct tipc_nl_compat_cmd_doit *cmd,
 
        err = nla_parse(attrbuf, tipc_genl_family.maxattr,
                        (const struct nlattr *)trans_buf->data,
-                       trans_buf->len, NULL);
+                       trans_buf->len, NULL, NULL);
        if (err)
                goto parse_out;
 
@@ -352,7 +352,7 @@ static int tipc_nl_compat_bearer_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(bearer, TIPC_NLA_BEARER_MAX,
-                              attrs[TIPC_NLA_BEARER], NULL);
+                              attrs[TIPC_NLA_BEARER], NULL, NULL);
        if (err)
                return err;
 
@@ -472,7 +472,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(link, TIPC_NLA_LINK_MAX, attrs[TIPC_NLA_LINK],
-                              NULL);
+                              NULL, NULL);
        if (err)
                return err;
 
@@ -480,7 +480,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(prop, TIPC_NLA_PROP_MAX,
-                              link[TIPC_NLA_LINK_PROP], NULL);
+                              link[TIPC_NLA_LINK_PROP], NULL, NULL);
        if (err)
                return err;
 
@@ -488,7 +488,7 @@ static int tipc_nl_compat_link_stat_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(stats, TIPC_NLA_STATS_MAX,
-                              link[TIPC_NLA_LINK_STATS], NULL);
+                              link[TIPC_NLA_LINK_STATS], NULL, NULL);
        if (err)
                return err;
 
@@ -598,7 +598,7 @@ static int tipc_nl_compat_link_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(link, TIPC_NLA_LINK_MAX, attrs[TIPC_NLA_LINK],
-                              NULL);
+                              NULL, NULL);
        if (err)
                return err;
 
@@ -795,7 +795,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(nt, TIPC_NLA_NAME_TABLE_MAX,
-                              attrs[TIPC_NLA_NAME_TABLE], NULL);
+                              attrs[TIPC_NLA_NAME_TABLE], NULL, NULL);
        if (err)
                return err;
 
@@ -803,7 +803,7 @@ static int tipc_nl_compat_name_table_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(publ, TIPC_NLA_PUBL_MAX,
-                              nt[TIPC_NLA_NAME_TABLE_PUBL], NULL);
+                              nt[TIPC_NLA_NAME_TABLE_PUBL], NULL, NULL);
        if (err)
                return err;
 
@@ -863,7 +863,7 @@ static int __tipc_nl_compat_publ_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(publ, TIPC_NLA_PUBL_MAX, attrs[TIPC_NLA_PUBL],
-                              NULL);
+                              NULL, NULL);
        if (err)
                return err;
 
@@ -929,7 +929,7 @@ static int tipc_nl_compat_sk_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX, attrs[TIPC_NLA_SOCK],
-                              NULL);
+                              NULL, NULL);
        if (err)
                return err;
 
@@ -940,8 +940,8 @@ static int tipc_nl_compat_sk_dump(struct tipc_nl_compat_msg *msg,
                u32 node;
                struct nlattr *con[TIPC_NLA_CON_MAX + 1];
 
-               nla_parse_nested(con, TIPC_NLA_CON_MAX, sock[TIPC_NLA_SOCK_CON],
-                                NULL);
+               nla_parse_nested(con, TIPC_NLA_CON_MAX,
+                                sock[TIPC_NLA_SOCK_CON], NULL, NULL);
 
                node = nla_get_u32(con[TIPC_NLA_CON_NODE]);
                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,
        if (!attrs[TIPC_NLA_MEDIA])
                return -EINVAL;
 
-       err = nla_parse_nested(media, TIPC_NLA_MEDIA_MAX, attrs[TIPC_NLA_MEDIA],
-                              NULL);
+       err = nla_parse_nested(media, TIPC_NLA_MEDIA_MAX,
+                              attrs[TIPC_NLA_MEDIA], NULL, NULL);
        if (err)
                return err;
 
@@ -998,7 +998,7 @@ static int tipc_nl_compat_node_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(node, TIPC_NLA_NODE_MAX, attrs[TIPC_NLA_NODE],
-                              NULL);
+                              NULL, NULL);
        if (err)
                return err;
 
@@ -1045,7 +1045,7 @@ static int tipc_nl_compat_net_dump(struct tipc_nl_compat_msg *msg,
                return -EINVAL;
 
        err = nla_parse_nested(net, TIPC_NLA_NET_MAX, attrs[TIPC_NLA_NET],
-                              NULL);
+                              NULL, NULL);
        if (err)
                return err;
 
index 4512e83652b16da259db9327fe0958c3642e70f1..1dcde24c705381d6230065e3380c14371e5a55dc 100644 (file)
@@ -1607,8 +1607,8 @@ int tipc_nl_peer_rm(struct sk_buff *skb, struct genl_info *info)
                return -EINVAL;
 
        err = nla_parse_nested(attrs, TIPC_NLA_NET_MAX,
-                              info->attrs[TIPC_NLA_NET],
-                              tipc_nl_net_policy);
+                              info->attrs[TIPC_NLA_NET], tipc_nl_net_policy,
+                              NULL);
        if (err)
                return err;
 
@@ -1774,7 +1774,7 @@ int tipc_nl_node_set_link(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX,
                               info->attrs[TIPC_NLA_LINK],
-                              tipc_nl_link_policy);
+                              tipc_nl_link_policy, NULL);
        if (err)
                return err;
 
@@ -1902,7 +1902,7 @@ int tipc_nl_node_reset_link_stats(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_LINK_MAX,
                               info->attrs[TIPC_NLA_LINK],
-                              tipc_nl_link_policy);
+                              tipc_nl_link_policy, NULL);
        if (err)
                return err;
 
@@ -2042,7 +2042,7 @@ int tipc_nl_node_set_monitor(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(attrs, TIPC_NLA_MON_MAX,
                               info->attrs[TIPC_NLA_MON],
-                              tipc_nl_monitor_policy);
+                              tipc_nl_monitor_policy, NULL);
        if (err)
                return err;
 
@@ -2163,7 +2163,7 @@ int tipc_nl_node_dump_monitor_peer(struct sk_buff *skb,
 
                err = nla_parse_nested(mon, TIPC_NLA_MON_MAX,
                                       attrs[TIPC_NLA_MON],
-                                      tipc_nl_monitor_policy);
+                                      tipc_nl_monitor_policy, NULL);
                if (err)
                        return err;
 
index 15f6ce7bf8687a95a9fe54080ec84cf62de9c762..740100abeec30742c40e87740c7df8ff64730552 100644 (file)
@@ -2866,7 +2866,7 @@ int tipc_nl_publ_dump(struct sk_buff *skb, struct netlink_callback *cb)
 
                err = nla_parse_nested(sock, TIPC_NLA_SOCK_MAX,
                                       attrs[TIPC_NLA_SOCK],
-                                      tipc_nl_sock_policy);
+                                      tipc_nl_sock_policy, NULL);
                if (err)
                        return err;
 
index 46061cf48cd13506a12cb9b8fb53f64d9a56aa06..ecca64fc6a6f223bf8c0e09e3a299fe4fd62509d 100644 (file)
@@ -457,7 +457,7 @@ int tipc_udp_nl_dump_remoteip(struct sk_buff *skb, struct netlink_callback *cb)
 
                err = nla_parse_nested(battrs, TIPC_NLA_BEARER_MAX,
                                       attrs[TIPC_NLA_BEARER],
-                                      tipc_nl_bearer_policy);
+                                      tipc_nl_bearer_policy, NULL);
                if (err)
                        return err;
 
@@ -609,7 +609,8 @@ int tipc_udp_nl_bearer_add(struct tipc_bearer *b, struct nlattr *attr)
        struct nlattr *opts[TIPC_NLA_UDP_MAX + 1];
        struct udp_media_addr *dst;
 
-       if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX, attr, tipc_nl_udp_policy))
+       if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX, attr,
+                            tipc_nl_udp_policy, NULL))
                return -EINVAL;
 
        if (!opts[TIPC_NLA_UDP_REMOTE])
@@ -662,7 +663,7 @@ static int tipc_udp_enable(struct net *net, struct tipc_bearer *b,
 
        if (nla_parse_nested(opts, TIPC_NLA_UDP_MAX,
                             attrs[TIPC_NLA_BEARER_UDP_OPTS],
-                            tipc_nl_udp_policy))
+                            tipc_nl_udp_policy, NULL))
                goto err;
 
        if (!opts[TIPC_NLA_UDP_LOCAL] || !opts[TIPC_NLA_UDP_REMOTE]) {
index 2312dc2ffdb98b37b2909274c57eed68935267d7..e7594a3a0ab69cccc0bc0862538260bda6ba4374 100644 (file)
@@ -548,7 +548,7 @@ static int nl80211_prepare_wdev_dump(struct sk_buff *skb,
        if (!cb->args[0]) {
                err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize,
                                  genl_family_attrbuf(&nl80211_fam),
-                                 nl80211_fam.maxattr, nl80211_policy);
+                                 nl80211_fam.maxattr, nl80211_policy, NULL);
                if (err)
                        return err;
 
@@ -719,7 +719,7 @@ static int nl80211_parse_key_new(struct nlattr *key, struct key_parse *k)
 {
        struct nlattr *tb[NL80211_KEY_MAX + 1];
        int err = nla_parse_nested(tb, NL80211_KEY_MAX, key,
-                                  nl80211_key_policy);
+                                  nl80211_key_policy, NULL);
        if (err)
                return err;
 
@@ -760,7 +760,7 @@ static int nl80211_parse_key_new(struct nlattr *key, struct key_parse *k)
 
                err = nla_parse_nested(kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1,
                                       tb[NL80211_KEY_DEFAULT_TYPES],
-                                      nl80211_key_default_policy);
+                                      nl80211_key_default_policy, NULL);
                if (err)
                        return err;
 
@@ -807,10 +807,10 @@ static int nl80211_parse_key_old(struct genl_info *info, struct key_parse *k)
 
        if (info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES]) {
                struct nlattr *kdt[NUM_NL80211_KEY_DEFAULT_TYPES];
-               int err = nla_parse_nested(
-                               kdt, NUM_NL80211_KEY_DEFAULT_TYPES - 1,
-                               info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES],
-                               nl80211_key_default_policy);
+               int err = nla_parse_nested(kdt,
+                                          NUM_NL80211_KEY_DEFAULT_TYPES - 1,
+                                          info->attrs[NL80211_ATTR_KEY_DEFAULT_TYPES],
+                                          nl80211_key_default_policy, NULL);
                if (err)
                        return err;
 
@@ -1892,8 +1892,8 @@ static int nl80211_dump_wiphy_parse(struct sk_buff *skb,
                                    struct nl80211_dump_wiphy_state *state)
 {
        struct nlattr **tb = genl_family_attrbuf(&nl80211_fam);
-       int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize,
-                             tb, nl80211_fam.maxattr, nl80211_policy);
+       int ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, tb,
+                             nl80211_fam.maxattr, nl80211_policy, NULL);
        /* ignore parse errors for backward compatibility */
        if (ret)
                return 0;
@@ -2308,7 +2308,7 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
                                    rem_txq_params) {
                        result = nla_parse_nested(tb, NL80211_TXQ_ATTR_MAX,
                                                  nl_txq_params,
-                                                 txq_params_policy);
+                                                 txq_params_policy, NULL);
                        if (result)
                                return result;
                        result = parse_txq_params(tb, &txq_params);
@@ -2695,8 +2695,8 @@ static int parse_monitor_flags(struct nlattr *nla, u32 *mntrflags)
        if (!nla)
                return -EINVAL;
 
-       if (nla_parse_nested(flags, NL80211_MNTR_FLAG_MAX,
-                            nla, mntr_flags_policy))
+       if (nla_parse_nested(flags, NL80211_MNTR_FLAG_MAX, nla,
+                            mntr_flags_policy, NULL))
                return -EINVAL;
 
        for (flag = 1; flag <= NL80211_MNTR_FLAG_MAX; flag++)
@@ -3561,7 +3561,7 @@ static int nl80211_parse_tx_bitrate_mask(struct genl_info *info,
                if (sband == NULL)
                        return -EINVAL;
                err = nla_parse_nested(tb, NL80211_TXRATE_MAX, tx_rates,
-                                      nl80211_txattr_policy);
+                                      nl80211_txattr_policy, NULL);
                if (err)
                        return err;
                if (tb[NL80211_TXRATE_LEGACY]) {
@@ -4100,8 +4100,8 @@ static int parse_station_flags(struct genl_info *info,
        if (!nla)
                return 0;
 
-       if (nla_parse_nested(flags, NL80211_STA_FLAG_MAX,
-                            nla, sta_flags_policy))
+       if (nla_parse_nested(flags, NL80211_STA_FLAG_MAX, nla,
+                            sta_flags_policy, NULL))
                return -EINVAL;
 
        /*
@@ -4728,7 +4728,7 @@ static int nl80211_parse_sta_wme(struct genl_info *info,
 
        nla = info->attrs[NL80211_ATTR_STA_WME];
        err = nla_parse_nested(tb, NL80211_STA_WME_MAX, nla,
-                              nl80211_sta_wme_policy);
+                              nl80211_sta_wme_policy, NULL);
        if (err)
                return err;
 
@@ -5853,7 +5853,7 @@ do {                                                                          \
                return -EINVAL;
        if (nla_parse_nested(tb, NL80211_MESHCONF_ATTR_MAX,
                             info->attrs[NL80211_ATTR_MESH_CONFIG],
-                            nl80211_meshconf_params_policy))
+                            nl80211_meshconf_params_policy, NULL))
                return -EINVAL;
 
        /* 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,
                return -EINVAL;
        if (nla_parse_nested(tb, NL80211_MESH_SETUP_ATTR_MAX,
                             info->attrs[NL80211_ATTR_MESH_SETUP],
-                            nl80211_mesh_setup_params_policy))
+                            nl80211_mesh_setup_params_policy, NULL))
                return -EINVAL;
 
        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)
        nla_for_each_nested(nl_reg_rule, info->attrs[NL80211_ATTR_REG_RULES],
                            rem_reg_rules) {
                r = nla_parse_nested(tb, NL80211_REG_RULE_ATTR_MAX,
-                                    nl_reg_rule, reg_rule_policy);
+                                    nl_reg_rule, reg_rule_policy, NULL);
                if (r)
                        goto bad_reg;
                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,
                return -EINVAL;
 
        err = nla_parse_nested(attr, NL80211_BSS_SELECT_ATTR_MAX, nest,
-                              nl80211_bss_select_policy);
+                              nl80211_bss_select_policy, NULL);
        if (err)
                return err;
 
@@ -6862,7 +6862,7 @@ nl80211_parse_sched_scan_plans(struct wiphy *wiphy, int n_plans,
                        return -EINVAL;
 
                err = nla_parse_nested(plan, NL80211_SCHED_SCAN_PLAN_MAX,
-                                      attr, nl80211_plan_policy);
+                                      attr, nl80211_plan_policy, NULL);
                if (err)
                        return err;
 
@@ -6953,7 +6953,8 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
 
                        err = nla_parse_nested(tb,
                                               NL80211_SCHED_SCAN_MATCH_ATTR_MAX,
-                                              attr, nl80211_match_policy);
+                                              attr, nl80211_match_policy,
+                                              NULL);
                        if (err)
                                return ERR_PTR(err);
                        /* add other standalone attributes here */
@@ -7132,7 +7133,8 @@ nl80211_parse_sched_scan(struct wiphy *wiphy, struct wireless_dev *wdev,
 
                        err = nla_parse_nested(tb,
                                               NL80211_SCHED_SCAN_MATCH_ATTR_MAX,
-                                              attr, nl80211_match_policy);
+                                              attr, nl80211_match_policy,
+                                              NULL);
                        if (err)
                                goto out_free;
                        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)
 
        err = nla_parse_nested(csa_attrs, NL80211_ATTR_MAX,
                               info->attrs[NL80211_ATTR_CSA_IES],
-                              nl80211_policy);
+                              nl80211_policy, NULL);
        if (err)
                return err;
 
@@ -8639,7 +8641,8 @@ static int nl80211_testmode_dump(struct sk_buff *skb,
                struct nlattr **attrbuf = genl_family_attrbuf(&nl80211_fam);
 
                err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize,
-                                 attrbuf, nl80211_fam.maxattr, nl80211_policy);
+                                 attrbuf, nl80211_fam.maxattr,
+                                 nl80211_policy, NULL);
                if (err)
                        goto out_err;
 
@@ -9530,7 +9533,7 @@ static int nl80211_set_cqm(struct sk_buff *skb, struct genl_info *info)
                return -EINVAL;
 
        err = nla_parse_nested(attrs, NL80211_ATTR_CQM_MAX, cqm,
-                              nl80211_attr_cqm_policy);
+                              nl80211_attr_cqm_policy, NULL);
        if (err)
                return err;
 
@@ -9940,7 +9943,7 @@ static int nl80211_parse_wowlan_tcp(struct cfg80211_registered_device *rdev,
                return -EINVAL;
 
        err = nla_parse_nested(tb, MAX_NL80211_WOWLAN_TCP, attr,
-                              nl80211_wowlan_tcp_policy);
+                              nl80211_wowlan_tcp_policy, NULL);
        if (err)
                return err;
 
@@ -10085,7 +10088,8 @@ static int nl80211_parse_wowlan_nd(struct cfg80211_registered_device *rdev,
                goto out;
        }
 
-       err = nla_parse_nested(tb, NL80211_ATTR_MAX, attr, nl80211_policy);
+       err = nla_parse_nested(tb, NL80211_ATTR_MAX, attr, nl80211_policy,
+                              NULL);
        if (err)
                goto out;
 
@@ -10122,7 +10126,7 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(tb, MAX_NL80211_WOWLAN_TRIG,
                               info->attrs[NL80211_ATTR_WOWLAN_TRIGGERS],
-                              nl80211_wowlan_policy);
+                              nl80211_wowlan_policy, NULL);
        if (err)
                return err;
 
@@ -10205,7 +10209,7 @@ static int nl80211_set_wowlan(struct sk_buff *skb, struct genl_info *info)
                        u8 *mask_pat;
 
                        nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat,
-                                        NULL);
+                                        NULL, NULL);
                        err = -EINVAL;
                        if (!pat_tb[NL80211_PKTPAT_MASK] ||
                            !pat_tb[NL80211_PKTPAT_PATTERN])
@@ -10416,7 +10420,7 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev,
        struct nlattr *pat_tb[NUM_NL80211_PKTPAT];
 
        err = nla_parse_nested(tb, NL80211_ATTR_COALESCE_RULE_MAX, rule,
-                              nl80211_coalesce_policy);
+                              nl80211_coalesce_policy, NULL);
        if (err)
                return err;
 
@@ -10454,7 +10458,7 @@ static int nl80211_parse_coalesce_rule(struct cfg80211_registered_device *rdev,
                            rem) {
                u8 *mask_pat;
 
-               nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, NULL);
+               nla_parse_nested(pat_tb, MAX_NL80211_PKTPAT, pat, NULL, NULL);
                if (!pat_tb[NL80211_PKTPAT_MASK] ||
                    !pat_tb[NL80211_PKTPAT_PATTERN])
                        return -EINVAL;
@@ -10575,7 +10579,7 @@ static int nl80211_set_rekey_data(struct sk_buff *skb, struct genl_info *info)
 
        err = nla_parse_nested(tb, MAX_NL80211_REKEY_DATA,
                               info->attrs[NL80211_ATTR_REKEY_DATA],
-                              nl80211_rekey_policy);
+                              nl80211_rekey_policy, NULL);
        if (err)
                return err;
 
@@ -10892,7 +10896,7 @@ static int nl80211_nan_add_func(struct sk_buff *skb,
 
        err = nla_parse_nested(tb, NL80211_NAN_FUNC_ATTR_MAX,
                               info->attrs[NL80211_ATTR_NAN_FUNC],
-                              nl80211_nan_func_policy);
+                              nl80211_nan_func_policy, NULL);
        if (err)
                return err;
 
@@ -10989,7 +10993,7 @@ static int nl80211_nan_add_func(struct sk_buff *skb,
 
                err = nla_parse_nested(srf_tb, NL80211_NAN_SRF_ATTR_MAX,
                                       tb[NL80211_NAN_FUNC_SRF],
-                                      nl80211_nan_srf_policy);
+                                      nl80211_nan_srf_policy, NULL);
                if (err)
                        goto out;
 
@@ -11524,8 +11528,8 @@ static int nl80211_prepare_vendor_dump(struct sk_buff *skb,
                return 0;
        }
 
-       err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize,
-                         attrbuf, nl80211_fam.maxattr, nl80211_policy);
+       err = nlmsg_parse(cb->nlh, GENL_HDRLEN + nl80211_fam.hdrsize, attrbuf,
+                         nl80211_fam.maxattr, nl80211_policy, NULL);
        if (err)
                return err;
 
index e93d5c0471b22a7c1ab53dc798a3171d7e0b0c4a..804e99a3227c969388d53a2ef5a5f53dd717f5c7 100644 (file)
@@ -932,8 +932,8 @@ static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb)
                u8 proto = 0;
                int err;
 
-               err = nlmsg_parse(cb->nlh, 0, attrs, XFRMA_MAX,
-                                 xfrma_policy);
+               err = nlmsg_parse(cb->nlh, 0, attrs, XFRMA_MAX, xfrma_policy,
+                                 NULL);
                if (err < 0)
                        return err;
 
@@ -2489,7 +2489,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh,
 
        err = nlmsg_parse(nlh, xfrm_msg_min[type], attrs,
                          link->nla_max ? : XFRMA_MAX,
-                         link->nla_pol ? : xfrma_policy);
+                         link->nla_pol ? : xfrma_policy, NULL);
        if (err < 0)
                return err;