summaryrefslogtreecommitdiff
path: root/ipif
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2013-01-27 13:48:28 +0000
committerIan Jackson <ijackson@chiark.greenend.org.uk>2013-01-27 13:48:28 +0000
commit693663c6262cbc89bc86374231b519c5d176970a (patch)
tree49f4b6f91d98a8d44f14486d673ea854c865d484 /ipif
parent447f36af68bf19c081a5dc0ead512babaf5f2ade (diff)
parentd6334b2883619614ed7350bf7faf621033911198 (diff)
downloaduserv-utils-693663c6262cbc89bc86374231b519c5d176970a.tar.gz
Merge branch 'master' of login.chiark.greenend.org.uk:/home/ian/public-git/userv-utils
Diffstat (limited to 'ipif')
-rw-r--r--ipif/service.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/ipif/service.c b/ipif/service.c
index 4c9b524..b9e40e2 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);
@@ -861,7 +863,7 @@ static void copydata(void) {
r= read(0, input_buf + input_waiting, want);
if (r>0) {
input_waiting += r;
- assert(r < sizeof(input_buf));
+ assert(input_waiting <= sizeof(input_buf));
more_rx_data(input_buf, rx_packet_buf);
} else if (r==0) {
terminate(0);