summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfenner <fenner@FreeBSD.org>2001-08-03 16:51:53 +0000
committerfenner <fenner@FreeBSD.org>2001-08-03 16:51:53 +0000
commitd1c0c6ac55e9d99774df06abe975b12fa1ee5b84 (patch)
treefdadbbf0b631495746fe5076a33953f52b2d8cbe
parent88b9c792ce4b73208c494d7354e2368d55e55451 (diff)
downloadFreeBSD-src-d1c0c6ac55e9d99774df06abe975b12fa1ee5b84.zip
FreeBSD-src-d1c0c6ac55e9d99774df06abe975b12fa1ee5b84.tar.gz
Don't terminate the uiomove() loop on a zero-length mbuf. It's not
particularly nice that IPSEC inserts a zero-length mbuf into the chain, and that bug should be fixed too, but interfaces should be robust to bad input. Print the interface name when TUNDEBUG()ing about dropping an mbuf.
-rw-r--r--sys/net/if_tun.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c
index 68cef88..e67a8ad 100644
--- a/sys/net/if_tun.c
+++ b/sys/net/if_tun.c
@@ -669,15 +669,14 @@ tunread(dev_t dev, struct uio *uio, int flag)
while (m0 && uio->uio_resid > 0 && error == 0) {
len = min(uio->uio_resid, m0->m_len);
- if (len == 0)
- break;
- error = uiomove(mtod(m0, caddr_t), len, uio);
+ if (len != 0)
+ error = uiomove(mtod(m0, caddr_t), len, uio);
MFREE(m0, m);
m0 = m;
}
if (m0) {
- TUNDEBUG("Dropping mbuf\n");
+ TUNDEBUG("%s%d: Dropping mbuf\n", ifp->if_name, ifp->if_unit);
m_freem(m0);
}
return error;
OpenPOWER on IntegriCloud