diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2023-08-01 13:36:47 +1000 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-08-04 01:18:00 +0200 |
commit | b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df (patch) | |
tree | 0bdbc536b9b623579cd67288d62993afacb19ef8 | |
parent | 8218d990138b7da8411351488ea06243134ae37b (diff) | |
download | passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.tar passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.tar.gz passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.tar.bz2 passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.tar.lz passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.tar.xz passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.tar.zst passt-b15ce5b6ceb0ba0cbb91d460c5a745a14c2050df.zip |
Use static assertion to verify that union epoll_ref is the right size
union epoll_ref is used to subdivide the 64-bit data field in struct
epoll_event. Thus it *must* fit within that field or we're likely to get
very subtle and nasty bugs. C11 introduces the notion of static assertions
which we can use to verify this is the case at compile time.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r-- | passt.h | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -32,6 +32,8 @@ struct tap_l4_msg { union epoll_ref; #include <stdbool.h> +#include <assert.h> +#include <sys/epoll.h> #include "packet.h" #include "icmp.h" @@ -64,6 +66,8 @@ union epoll_ref { }; uint64_t u64; }; +static_assert(sizeof(union epoll_ref) <= sizeof(union epoll_data), + "epoll_ref must have same size as epoll_data"); #define TAP_BUF_BYTES \ ROUND_DOWN(((ETH_MAX_MTU + sizeof(uint32_t)) * 128), PAGE_SIZE) |