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:
parent
88b9c792ce
commit
d1c0c6ac55
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user