summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--acinclude.m43
-rw-r--r--datapath/datapath.c4
-rw-r--r--datapath/flow_netlink.c9
-rw-r--r--datapath/linux/compat/include/net/netlink.h12
-rw-r--r--datapath/meter.c8
-rw-r--r--datapath/vport-vxlan.c4
6 files changed, 27 insertions, 13 deletions
diff --git a/acinclude.m4 b/acinclude.m4
index 729d2c65d..02efea6de 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1053,6 +1053,9 @@ AC_DEFUN([OVS_CHECK_LINUX_COMPAT], [
OVS_FIND_FIELD_IFELSE([$KSRC/include/net/genetlink.h], [genl_ops],
[policy],
[OVS_DEFINE([HAVE_GENL_OPS_POLICY])])
+ OVS_GREP_IFELSE([$KSRC/include/net/netlink.h],
+ [nla_parse_deprecated_strict],
+ [OVS_DEFINE([HAVE_NLA_PARSE_DEPRECATED_STRICT])])
if cmp -s datapath/linux/kcompat.h.new \
datapath/linux/kcompat.h >/dev/null 2>&1; then
diff --git a/datapath/datapath.c b/datapath/datapath.c
index f0c345723..a7af7849a 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -1401,8 +1401,8 @@ static int ovs_flow_cmd_dump(struct sk_buff *skb, struct netlink_callback *cb)
u32 ufid_flags;
int err;
- err = genlmsg_parse(cb->nlh, &dp_flow_genl_family, a,
- OVS_FLOW_ATTR_MAX, flow_policy, NULL);
+ err = genlmsg_parse_deprecated(cb->nlh, &dp_flow_genl_family, a,
+ OVS_FLOW_ATTR_MAX, flow_policy, NULL);
if (err)
return err;
ufid_flags = ovs_nla_get_ufid_flags(a[OVS_FLOW_ATTR_UFID_FLAGS]);
diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c
index 9fc1a1922..d3fd77106 100644
--- a/datapath/flow_netlink.c
+++ b/datapath/flow_netlink.c
@@ -2859,8 +2859,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, NULL);
+ error = nla_parse_nested_deprecated(a, OVS_USERSPACE_ATTR_MAX, attr,
+ userspace_policy, NULL);
if (error)
return error;
@@ -2891,8 +2891,9 @@ static int validate_and_copy_check_pkt_len(struct net *net,
int nested_acts_start;
int start, err;
- err = nla_parse_nested(a, OVS_CHECK_PKT_LEN_ATTR_MAX, attr,
- cpl_policy, NULL);
+ err = nla_parse_deprecated_strict(a, OVS_CHECK_PKT_LEN_ATTR_MAX,
+ nla_data(attr), nla_len(attr),
+ cpl_policy, NULL);
if (err)
return err;
diff --git a/datapath/linux/compat/include/net/netlink.h b/datapath/linux/compat/include/net/netlink.h
index 34fc3460d..84e073974 100644
--- a/datapath/linux/compat/include/net/netlink.h
+++ b/datapath/linux/compat/include/net/netlink.h
@@ -143,6 +143,11 @@ static inline int nla_put_be64(struct sk_buff *skb, int attrtype, __be64 value,
#endif
+#ifndef HAVE_NLA_PARSE_DEPRECATED_STRICT
+#define nla_parse_nested_deprecated nla_parse_nested
+#define nla_parse_deprecated_strict nla_parse
+#define genlmsg_parse_deprecated genlmsg_parse
+
#ifndef HAVE_NETLINK_EXT_ACK
struct netlink_ext_ack;
@@ -153,7 +158,8 @@ static inline int rpl_nla_parse_nested(struct nlattr *tb[], int maxtype,
{
return nla_parse_nested(tb, maxtype, nla, policy);
}
-#define nla_parse_nested rpl_nla_parse_nested
+#undef nla_parse_nested_deprecated
+#define nla_parse_nested_deprecated rpl_nla_parse_nested
static inline int rpl_nla_parse(struct nlattr **tb, int maxtype,
const struct nlattr *head, int len,
@@ -162,8 +168,10 @@ static inline int rpl_nla_parse(struct nlattr **tb, int maxtype,
{
return nla_parse(tb, maxtype, head, len, policy);
}
-#define nla_parse rpl_nla_parse
+#undef nla_parse_deprecated_strict
+#define nla_parse_deprecated_strict rpl_nla_parse
#endif
+#endif /* HAVE_NLA_PARSE_DEPRECATED_STRICT */
#ifndef HAVE_NLA_NEST_START_NOFLAG
static inline struct nlattr *rpl_nla_nest_start_noflag(struct sk_buff *skb,
diff --git a/datapath/meter.c b/datapath/meter.c
index 8cecd5a34..92c9c3671 100644
--- a/datapath/meter.c
+++ b/datapath/meter.c
@@ -239,9 +239,11 @@ static struct dp_meter *dp_meter_create(struct nlattr **a)
struct nlattr *attr[OVS_BAND_ATTR_MAX + 1];
u32 band_max_delta_t;
- err = nla_parse((struct nlattr **)&attr, OVS_BAND_ATTR_MAX,
- nla_data(nla), nla_len(nla), band_policy,
- NULL);
+ err = nla_parse_deprecated_strict((struct nlattr **)&attr,
+ OVS_BAND_ATTR_MAX,
+ nla_data(nla),
+ nla_len(nla),
+ band_policy, NULL);
if (err)
goto exit_free_meter;
diff --git a/datapath/vport-vxlan.c b/datapath/vport-vxlan.c
index 70ed376e3..79331c968 100644
--- a/datapath/vport-vxlan.c
+++ b/datapath/vport-vxlan.c
@@ -99,8 +99,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,
- NULL);
+ err = nla_parse_nested_deprecated(exts, OVS_VXLAN_EXT_MAX, attr,
+ exts_policy, NULL);
if (err < 0)
return err;