From 5507f31d44a281a20ee65c3c6b1d91cec820cd13 Mon Sep 17 00:00:00 2001 From: royger Date: Fri, 29 Jul 2016 16:33:45 +0000 Subject: [PATCH] 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 Sponsored by: Citrix Systems R&D MFC after: 5 days Reviewed by: Wei Liu Differential revision: https://reviews.freebsd.org/D7349 --- sys/dev/xen/netfront/netfront.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c index 3d02a52d0ac0..697a294c5ae8 100644 --- a/sys/dev/xen/netfront/netfront.c +++ b/sys/dev/xen/netfront/netfront.c @@ -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 */