In the case where the client writes a packet and then closes the
socket, because we receive EPOLLIN|EPOLLRDHUP together we have a
choice of whether to close the socket immediately, or read the packet
and then close the socket. Choose the latter.
This should improve fuzzing coverage and arguably is a better choice
even for regular use since dropping packets on close is bad.
See-also: https://archives.passt.top/passt-dev/20221117171805.3746f53a@elisabeth/
Signed-off-by: Richard W.M. Jones
---
tap.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tap.c b/tap.c
index 9998127..d97af6a 100644
--- a/tap.c
+++ b/tap.c
@@ -1106,13 +1106,13 @@ void tap_handler(struct ctx *c, int fd, uint32_t events,
return;
}
- if (events & (EPOLLRDHUP | EPOLLHUP | EPOLLERR))
- goto reinit;
-
if ((c->mode == MODE_PASST && tap_handler_passt(c, now)) ||
(c->mode == MODE_PASTA && tap_handler_pasta(c, now)))
goto reinit;
+ if (events & (EPOLLRDHUP | EPOLLHUP | EPOLLERR))
+ goto reinit;
+
return;
reinit:
if (c->one_off) {
--
2.37.0.rc2