aboutgitcodebugslistschat
path: root/passt.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-08-11 15:12:22 +1000
committerStefano Brivio <sbrivio@redhat.com>2023-08-13 17:29:53 +0200
commit6a6735ece442298e000de43f5325842a442c263d (patch)
treea810b909c527ddea425d6887fc598c5740efd27c /passt.h
parent34016444534120f2fa5a049675815843d041bc16 (diff)
downloadpasst-6a6735ece442298e000de43f5325842a442c263d.tar
passt-6a6735ece442298e000de43f5325842a442c263d.tar.gz
passt-6a6735ece442298e000de43f5325842a442c263d.tar.bz2
passt-6a6735ece442298e000de43f5325842a442c263d.tar.lz
passt-6a6735ece442298e000de43f5325842a442c263d.tar.xz
passt-6a6735ece442298e000de43f5325842a442c263d.tar.zst
passt-6a6735ece442298e000de43f5325842a442c263d.zip
epoll: Always use epoll_ref for the epoll data variable
epoll_ref contains a variety of information useful when handling epoll events on our sockets, and we place it in the epoll_event data field returned by epoll. However, for a few other things we use the 'fd' field in the standard union of types for that data field. This actually introduces a bug which is vanishingly unlikely to hit in practice, but very nasty if it ever did: theoretically if we had a very large file descriptor number for fd_tap or fd_tap_listen it could overflow into bits that overlap with the 'proto' field in epoll_ref. With some very bad luck this could mean that we mistakenly think an event on a regular socket is an event on fd_tap or fd_tap_listen. More practically, using different (but overlapping) fields of the epoll_data means we can't unify dispatch for the various different objects in the epoll. Therefore use the same epoll_ref as the data for the tap fds and the netns quit fd, adding new fd type values to describe them. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'passt.h')
-rw-r--r--passt.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/passt.h b/passt.h
index 2110781..8878a11 100644
--- a/passt.h
+++ b/passt.h
@@ -55,8 +55,12 @@ enum epoll_type {
EPOLL_TYPE_ICMP,
/* ICMPv6 sockets */
EPOLL_TYPE_ICMPV6,
+ /* inotify fd watching for end of netns (pasta) */
+ EPOLL_TYPE_NSQUIT,
+ /* tap char device, or qemu socket fd */
+ EPOLL_TYPE_TAP,
- EPOLL_TYPE_MAX = EPOLL_TYPE_ICMPV6,
+ EPOLL_TYPE_MAX = EPOLL_TYPE_TAP,
};
/**