| From foo@baz Tue 03 Dec 2019 11:07:30 AM CET |
| From: Paolo Abeni <pabeni@redhat.com> |
| Date: Tue, 26 Nov 2019 12:55:50 +0100 |
| Subject: openvswitch: fix flow command message size |
| |
| From: Paolo Abeni <pabeni@redhat.com> |
| |
| [ Upstream commit 4e81c0b3fa93d07653e2415fa71656b080a112fd ] |
| |
| When user-space sets the OVS_UFID_F_OMIT_* flags, and the relevant |
| flow has no UFID, we can exceed the computed size, as |
| ovs_nla_put_identifier() will always dump an OVS_FLOW_ATTR_KEY |
| attribute. |
| Take the above in account when computing the flow command message |
| size. |
| |
| Fixes: 74ed7ab9264c ("openvswitch: Add support for unique flow IDs.") |
| Reported-by: Qi Jun Ding <qding@redhat.com> |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/openvswitch/datapath.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/net/openvswitch/datapath.c |
| +++ b/net/openvswitch/datapath.c |
| @@ -738,9 +738,13 @@ static size_t ovs_flow_cmd_msg_size(cons |
| { |
| size_t len = NLMSG_ALIGN(sizeof(struct ovs_header)); |
| |
| - /* OVS_FLOW_ATTR_UFID */ |
| + /* OVS_FLOW_ATTR_UFID, or unmasked flow key as fallback |
| + * see ovs_nla_put_identifier() |
| + */ |
| if (sfid && ovs_identifier_is_ufid(sfid)) |
| len += nla_total_size(sfid->ufid_len); |
| + else |
| + len += nla_total_size(ovs_key_attr_size()); |
| |
| /* OVS_FLOW_ATTR_KEY */ |
| if (!sfid || should_fill_key(sfid, ufid_flags)) |