slirp: Add a special case for the NULL socket

NULL sockets are used for NDP, BOOTP, and other critical operations.
If the topmost mbuf in a NULL session is blocked pending resolution,
it may cause problems if it blocks other packets with a NULL socket.
So do not add mbufs with a NULL socket field to the same session.

Signed-off-by: Kevin Cernekee <cernekee@chromium.org>
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
This commit is contained in:
Kevin Cernekee 2017-09-20 13:42:05 -07:00 committed by Samuel Thibault
parent e2aad34d73
commit 13146a8395

View File

@ -73,6 +73,7 @@ if_output(struct socket *so, struct mbuf *ifm)
* We mustn't put this packet back on the fastq (or we'll send it out of order) * We mustn't put this packet back on the fastq (or we'll send it out of order)
* XXX add cache here? * XXX add cache here?
*/ */
if (so) {
for (ifq = (struct mbuf *) slirp->if_batchq.qh_rlink; for (ifq = (struct mbuf *) slirp->if_batchq.qh_rlink;
(struct quehead *) ifq != &slirp->if_batchq; (struct quehead *) ifq != &slirp->if_batchq;
ifq = ifq->ifq_prev) { ifq = ifq->ifq_prev) {
@ -83,6 +84,7 @@ if_output(struct socket *so, struct mbuf *ifm)
goto diddit; goto diddit;
} }
} }
}
/* No match, check which queue to put it on */ /* No match, check which queue to put it on */
if (so && (so->so_iptos & IPTOS_LOWDELAY)) { if (so && (so->so_iptos & IPTOS_LOWDELAY)) {