svn commit: r368281 - head/sys/dev/e1000

Mitchell Horne mhorne at FreeBSD.org
Wed Dec 2 17:37:32 UTC 2020


Author: mhorne
Date: Wed Dec  2 17:37:32 2020
New Revision: 368281
URL: https://svnweb.freebsd.org/changeset/base/368281

Log:
  em: fix a null de-reference in em_free_pci_resources
  
  A failure in iflib_device_register() can result in
  em_free_pci_resources() being called after receive queues have already
  been freed. In particular, a failure to allocate IRQ resources will goto
  fail_queues, where IFDI_QUEUES_FREE() will be called via
  iflib_tx_structures_free(), preceding the call to IFDI_DETACH().
  
  Cope with this by checking adapter->rx_queues before dereferencing it.
  A similar check is present in ixgbe(4) and ixl(4).
  
  MFC after:	1 week
  Sponsored by:	NetApp, Inc.
  Sponsored by:	Klara, Inc.
  Differential Revision:	https://reviews.freebsd.org/D27260

Modified:
  head/sys/dev/e1000/if_em.c

Modified: head/sys/dev/e1000/if_em.c
==============================================================================
--- head/sys/dev/e1000/if_em.c	Wed Dec  2 17:22:29 2020	(r368280)
+++ head/sys/dev/e1000/if_em.c	Wed Dec  2 17:37:32 2020	(r368281)
@@ -2234,8 +2234,10 @@ em_free_pci_resources(if_ctx_t ctx)
 	if (adapter->intr_type == IFLIB_INTR_MSIX)
 		iflib_irq_free(ctx, &adapter->irq);
 
-	for (int i = 0; i < adapter->rx_num_queues; i++, que++) {
-		iflib_irq_free(ctx, &que->que_irq);
+	if (que != NULL) {
+		for (int i = 0; i < adapter->rx_num_queues; i++, que++) {
+			iflib_irq_free(ctx, &que->que_irq);
+		}
 	}
 
 	if (adapter->memory != NULL) {


More information about the svn-src-all mailing list