summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2012-01-14 15:47:08 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2012-01-14 15:47:08 +0000
commit03203c8a42124de66a5e8d5eee2e5b86a3ec44cf (patch)
treedbc6ecbffd9aa306aed670da95a4ea46ded34488
parentfdeb527b85307e455f87b2fed7f3527de80a650d (diff)
downloaduserv-utils-03203c8a42124de66a5e8d5eee2e5b86a3ec44cf.tar.gz
ipif fixes
-rw-r--r--debian/changelog9
-rw-r--r--ipif/service.c4
2 files changed, 12 insertions, 1 deletions
diff --git a/debian/changelog b/debian/changelog
index 0c3b57f..35d54fc 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+userv-utils (0.4.1) unstable; urgency=low
+
+ ipif bugfixes:
+ * Ignore empty packets (ie consecutive END bytes), as tun rejects
+ them with EINVAL.
+ * Tolerate ENOMEM from tun.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk> Sat, 14 Jan 2012 15:46:53 +0000
+
userv-utils (0.4) unstable; urgency=low
ipif:
diff --git a/ipif/service.c b/ipif/service.c
index 670b447..b9d8b44 100644
--- a/ipif/service.c
+++ b/ipif/service.c
@@ -719,11 +719,13 @@ static void setnonblock(int fd) {
}
static void rx_packet(const uint8_t *packet, int len) {
+ if (!len)
+ return;
for (;;) {
int r= write(tunfd, packet, len);
if (r<0) {
if (errno==EINTR) continue;
- if (errno==EAGAIN) return; /* oh well */
+ if (errno==EAGAIN || errno==ENOMEM) return; /* oh well */
sysfatal("error writing packet to tun (transmitting)");
}
assert(r==len);