diff options
author | Ilya Maximets <i.maximets@ovn.org> | 2019-10-01 18:18:23 +0300 |
---|---|---|
committer | Ilya Maximets <i.maximets@ovn.org> | 2019-10-10 11:11:00 +0200 |
commit | 361a47d669751a936d389d45cc8ffcb3ef66499d (patch) | |
tree | 60f3e8c7caed4ca57a1450feca641488d73f329a /.cirrus.yml | |
parent | 8009785273759827da995f9dde7d638c5f2bf0e5 (diff) | |
download | openvswitch-361a47d669751a936d389d45cc8ffcb3ef66499d.tar.gz |
flow: Fix using pointer to member of packed struct icmp6_hdr.
OVS has no structure definition for ICMPv6 header with additional
data. More precisely, it has, but this structure named as
'icmp6_error_header' and only suitable to store error related
extended information. 'flow_compose_l4' stores additional
information in reserved bits by using system defined structure
'icmp6_hdr', which is marked as 'packed' and this leads to
build failure with gcc >= 9:
lib/flow.c:3041:34: error:
taking address of packed member of 'struct icmp6_hdr' may result
in an unaligned pointer value [-Werror=address-of-packed-member]
uint32_t *reserved = &icmp->icmp6_dataun.icmp6_un_data32[0];
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fix that by renaming 'icmp6_error_header' to 'icmp6_data_header'
and allowing it to store not only errors, but any type of additional
information by analogue with 'struct icmp6_hdr'.
All the usages of 'struct icmp6_hdr' replaced with this new structure.
Removed redundant conversions between network and host representations.
Now fields are always in be.
This also, probably, makes flow_compose_l4 more robust by avoiding
possible unaligned accesses to 32 bit value.
Fixes: 9b2b84973db7 ("Support for match & set ICMPv6 reserved and options type fields")
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
Acked-by: William Tu <u9012063@gmail.com>
Acked-by: Ben Pfaff <blp@ovn.org>
Diffstat (limited to '.cirrus.yml')
0 files changed, 0 insertions, 0 deletions