openvswitch: fix potential out of bound access in parse_ct
Before the 'type' is validated, we shouldn't use it to fetch the
ovs_ct_attr_lens's minlen and maxlen, else, out of bound access
may happen.
Fixes: 7f8a436eaa
("openvswitch: Add conntrack action")
Signed-off-by: Liping Zhang <zlpnobody@gmail.com>
Acked-by: Pravin B Shelar <pshelar@ovn.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
9476d39366
commit
69ec932e36
|
@ -1310,8 +1310,8 @@ static int parse_ct(const struct nlattr *attr, struct ovs_conntrack_info *info,
|
|||
|
||||
nla_for_each_nested(a, attr, rem) {
|
||||
int type = nla_type(a);
|
||||
int maxlen = ovs_ct_attr_lens[type].maxlen;
|
||||
int minlen = ovs_ct_attr_lens[type].minlen;
|
||||
int maxlen;
|
||||
int minlen;
|
||||
|
||||
if (type > OVS_CT_ATTR_MAX) {
|
||||
OVS_NLERR(log,
|
||||
|
@ -1319,6 +1319,9 @@ static int parse_ct(const struct nlattr *attr, struct ovs_conntrack_info *info,
|
|||
type, OVS_CT_ATTR_MAX);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
maxlen = ovs_ct_attr_lens[type].maxlen;
|
||||
minlen = ovs_ct_attr_lens[type].minlen;
|
||||
if (nla_len(a) < minlen || nla_len(a) > maxlen) {
|
||||
OVS_NLERR(log,
|
||||
"Conntrack attr type has unexpected length (type=%d, length=%d, expected=%d)",
|
||||
|
|
Loading…
Reference in New Issue