summaryrefslogtreecommitdiffstats
path: root/sys/net/if_tun.c
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 /sys/net/if_tun.c
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.
Diffstat (limited to 'sys/net/if_tun.c')
-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