aboutgitcodebugslistschat
path: root/tap.c
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2022-11-17 18:49:35 +0000
committerStefano Brivio <sbrivio@redhat.com>2022-11-25 01:40:57 +0100
commit190169c544744d38a280fff0499f764642dad2e3 (patch)
treec55fbf6fb7998f6faa75ecbbc1c4c626a7d6352e /tap.c
parent6b4e68383c66bd8a3863d9a708bae583d18dc056 (diff)
downloadpasst-190169c544744d38a280fff0499f764642dad2e3.tar
passt-190169c544744d38a280fff0499f764642dad2e3.tar.gz
passt-190169c544744d38a280fff0499f764642dad2e3.tar.bz2
passt-190169c544744d38a280fff0499f764642dad2e3.tar.lz
passt-190169c544744d38a280fff0499f764642dad2e3.tar.xz
passt-190169c544744d38a280fff0499f764642dad2e3.tar.zst
passt-190169c544744d38a280fff0499f764642dad2e3.zip
passt, tap: Process data on the socket before HUP/ERR events
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 <rjones@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.c')
-rw-r--r--tap.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/tap.c b/tap.c
index 2cfd82b..2e603ed 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) {