diff options
| author | David Gibson <david@gibson.dropbear.id.au> | 2026-01-13 14:54:14 +1100 |
|---|---|---|
| committer | Stefano Brivio <sbrivio@redhat.com> | 2026-01-14 01:07:51 +0100 |
| commit | fa765d54b048127c77e0699843f4008b026a0e9f (patch) | |
| tree | 6b3a722313a6c75fd5553767e7c33b5deba46f36 | |
| parent | 4af3d83170fd227b177f9861d93391e3d2008d34 (diff) | |
| download | passt-fa765d54b048127c77e0699843f4008b026a0e9f.tar passt-fa765d54b048127c77e0699843f4008b026a0e9f.tar.gz passt-fa765d54b048127c77e0699843f4008b026a0e9f.tar.bz2 passt-fa765d54b048127c77e0699843f4008b026a0e9f.tar.lz passt-fa765d54b048127c77e0699843f4008b026a0e9f.tar.xz passt-fa765d54b048127c77e0699843f4008b026a0e9f.tar.zst passt-fa765d54b048127c77e0699843f4008b026a0e9f.zip | |
epoll_ctl: Move u64 variant first for safer initialisation
cppcheck-2.19.1 pointed out that an initialiser like:
union epoll_ref foo = { 0 };
doesn't necessarily zero the whole union, because the first variant listed
may not be the full length. I don't think this is actually broken in
practice, but I'm not 100% certain about that.
In any case, make it more clearly correct, and stop cppcheck complaining
by moving the @u64 variant to be the first one.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
| -rw-r--r-- | epoll_ctl.h | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/epoll_ctl.h b/epoll_ctl.h index 3f802e7..2c103cd 100644 --- a/epoll_ctl.h +++ b/epoll_ctl.h @@ -17,6 +17,7 @@ /** * union epoll_ref - Breakdown of reference for epoll fd bookkeeping + * @u64: Opaque reference for epoll_ctl() and epoll_wait() * @type: Type of fd (tells us what to do with events) * @fd: File descriptor number (implies < 2^24 total descriptors) * @flow: Index of the flow this fd is linked to @@ -25,9 +26,9 @@ * @data: Data handled by protocol handlers * @nsdir_fd: netns dirfd for fallback timer checking if namespace is gone * @queue: vhost-user queue index for this fd - * @u64: Opaque reference for epoll_ctl() and epoll_wait() */ union epoll_ref { + uint64_t u64; struct { enum epoll_type type:8; int32_t fd:FD_REF_BITS; @@ -40,7 +41,6 @@ union epoll_ref { int queue; }; }; - uint64_t u64; }; static_assert(sizeof(union epoll_ref) <= sizeof(union epoll_data), "epoll_ref must have same size as epoll_data"); |
