chiark / gitweb /
Merge branch 'master' of login.chiark.greenend.org.uk:/home/ian/public-git/userv...
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Jan 2013 13:48:28 +0000 (13:48 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Jan 2013 13:48:28 +0000 (13:48 +0000)
debian/changelog
debian/control
ipif/service.c

index 72b0964745bddc5128b31a2157f60eb031afbe99..0ca2a920a908342c26be727e190b4bff72a8940c 100644 (file)
@@ -1,4 +1,21 @@
-userv-utils (0.4~beta2) unstable; urgency=low
+userv-utils (0.4.2) unstable; urgency=low
+
+  ipif bugfix:
+  * Fix failure which occurs when input data starts to back up:
+    service.c:866: copydata: Assertion `r < sizeof(input_buf)' failed.
+
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sun, 15 Jan 2012 01:00:00 +0000
+
+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:
   * Now uses tun, not slip.  All modern Linux kernels have tun support,
@@ -6,7 +23,7 @@ userv-utils (0.4~beta2) unstable; urgency=low
     been implicated in kernel problems.  Interfaces are now called
     "userv%d" (ie, userv0, userv1, etc.).  Only "slip" is now supported.
 
- --
+ -- Ian Jackson <ijackson@chiark.greenend.org.uk>  Sat, 14 Jan 2012 15:24:57 +0000
 
 userv-utils (0.4~beta1) unstable; urgency=low
 
index 4f11db81dfbcc32346de077f47d42eb30ec2e405..48852b41a6e8a5f00becf647d4fa7081d1e3deeb 100644 (file)
@@ -1,7 +1,7 @@
 Source: userv-utils
 Section: admin
 Priority: extra
-Maintainer: Ian Jackson <ian@chiark.greenend.org.uk>
+Maintainer: Ian Jackson <ijackson@chiark.greenend.org.uk>
 Standards-Version: 2.1.1.0
 
 Package: userv-ipif
index 4c9b52463623a2a2437f6f5c0d318724f8f102af..b9e40e29fcdb3a2f26ccabf02122d49ab230d388 100644 (file)
@@ -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);