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.
This commit is contained in:
Bill Fenner 2001-08-03 16:51:53 +00:00
parent 2325431216
commit 02e3112ae7
1 changed files with 3 additions and 4 deletions

View File

@ -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;