xen-netfront: fix trying to send packets with disconnected netfront

In certain circumstances xn_txq_mq_start might be called with num_queues ==
0 during the resume phase after a migration, which can trigger a KASSERT.
Fix this by making sure the carrier is on before trying to transmit, or else
return that the queues are full.

Just as a note, I haven't been able to reproduce this crash on my test
systems, but I still think it's possible and worth fixing.

Reported by:		Karl Pielorz <kpielorz_lst@tdx.co.uk>
Sponsored by:		Citrix Systems R&D
MFC after:		5 days
Reviewed by:		Wei Liu <wei.liu2@citrix.com>
Differential revision:	https://reviews.freebsd.org/D7349
This commit is contained in:
royger 2016-07-29 16:33:45 +00:00
parent ba472a5164
commit 5507f31d44

View File

@ -2157,6 +2157,9 @@ xn_txq_mq_start(struct ifnet *ifp, struct mbuf *m)
np = ifp->if_softc;
npairs = np->num_queues;
if (!netfront_carrier_ok(np))
return (ENOBUFS);
KASSERT(npairs != 0, ("called with 0 available queues"));
/* check if flowid is set */