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:
fenner 2001-08-03 16:51:53 +00:00
parent 88b9c792ce
commit d1c0c6ac55

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;