mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-24 18:38:38 +00:00
openvswitch: packet messages need their own probe attribtue
User space is currently sending a OVS_FLOW_ATTR_PROBE for both flow
and packet messages. This leads to an out-of-bounds access in
ovs_packet_cmd_execute() because OVS_FLOW_ATTR_PROBE >
OVS_PACKET_ATTR_MAX.
Introduce a new OVS_PACKET_ATTR_PROBE with the same numeric value
as OVS_FLOW_ATTR_PROBE to grow the range of accepted packet attributes
while maintaining to be binary compatible with existing OVS binaries.
Fixes: 05da589
("openvswitch: Add support for OVS_FLOW_ATTR_PROBE.")
Reported-by: Sander Eikelenboom <linux@eikelenboom.it>
Tracked-down-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Reviewed-by: Jesse Gross <jesse@nicira.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
776d4e9f5c
commit
1ba398041f
@ -174,6 +174,10 @@ enum ovs_packet_attr {
|
|||||||
OVS_PACKET_ATTR_USERDATA, /* OVS_ACTION_ATTR_USERSPACE arg. */
|
OVS_PACKET_ATTR_USERDATA, /* OVS_ACTION_ATTR_USERSPACE arg. */
|
||||||
OVS_PACKET_ATTR_EGRESS_TUN_KEY, /* Nested OVS_TUNNEL_KEY_ATTR_*
|
OVS_PACKET_ATTR_EGRESS_TUN_KEY, /* Nested OVS_TUNNEL_KEY_ATTR_*
|
||||||
attributes. */
|
attributes. */
|
||||||
|
OVS_PACKET_ATTR_UNUSED1,
|
||||||
|
OVS_PACKET_ATTR_UNUSED2,
|
||||||
|
OVS_PACKET_ATTR_PROBE, /* Packet operation is a feature probe,
|
||||||
|
error logging should be suppressed. */
|
||||||
__OVS_PACKET_ATTR_MAX
|
__OVS_PACKET_ATTR_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -524,7 +524,7 @@ static int ovs_packet_cmd_execute(struct sk_buff *skb, struct genl_info *info)
|
|||||||
struct vport *input_vport;
|
struct vport *input_vport;
|
||||||
int len;
|
int len;
|
||||||
int err;
|
int err;
|
||||||
bool log = !a[OVS_FLOW_ATTR_PROBE];
|
bool log = !a[OVS_PACKET_ATTR_PROBE];
|
||||||
|
|
||||||
err = -EINVAL;
|
err = -EINVAL;
|
||||||
if (!a[OVS_PACKET_ATTR_PACKET] || !a[OVS_PACKET_ATTR_KEY] ||
|
if (!a[OVS_PACKET_ATTR_PACKET] || !a[OVS_PACKET_ATTR_KEY] ||
|
||||||
@ -610,6 +610,7 @@ static const struct nla_policy packet_policy[OVS_PACKET_ATTR_MAX + 1] = {
|
|||||||
[OVS_PACKET_ATTR_PACKET] = { .len = ETH_HLEN },
|
[OVS_PACKET_ATTR_PACKET] = { .len = ETH_HLEN },
|
||||||
[OVS_PACKET_ATTR_KEY] = { .type = NLA_NESTED },
|
[OVS_PACKET_ATTR_KEY] = { .type = NLA_NESTED },
|
||||||
[OVS_PACKET_ATTR_ACTIONS] = { .type = NLA_NESTED },
|
[OVS_PACKET_ATTR_ACTIONS] = { .type = NLA_NESTED },
|
||||||
|
[OVS_PACKET_ATTR_PROBE] = { .type = NLA_FLAG },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct genl_ops dp_packet_genl_ops[] = {
|
static const struct genl_ops dp_packet_genl_ops[] = {
|
||||||
|
Loading…
Reference in New Issue
Block a user