Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 5 Jul 2021 14:38:20 GMT
From:      Mike Karels <karels@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 0a4ad905bf44 - stable/13 - genet: Fix potential crash during attach
Message-ID:  <202107051438.165EcKWh058400@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by karels:

URL: https://cgit.FreeBSD.org/src/commit/?id=0a4ad905bf44d5286ae8e1c4c9693c98fca43183

commit 0a4ad905bf44d5286ae8e1c4c9693c98fca43183
Author:     Mike Karels <karels@FreeBSD.org>
AuthorDate: 2021-06-20 16:10:26 +0000
Commit:     Mike Karels <karels@FreeBSD.org>
CommitDate: 2021-07-05 14:12:09 +0000

    genet: Fix potential crash during attach
    
    As pointed out in the bug, the genet driver (RPi4 Ethernet) was
    attaching the interrupts before the data structures were fully
    initialized, causing a crash if an interrupt came in during the
    attach.  Fix by reordering code blocks.
    
    PR:             256334
    Reported by:    < ghuckriede at blackberry.com >
    Reviewed by:    < ghuckriede at blackberry.com > (informally)
    
    (cherry picked from commit 13604fb0fd43c85e6bb3a0ad6400a684f150bdea)
---
 sys/arm64/broadcom/genet/if_genet.c | 30 +++++++++++++++---------------
 1 file changed, 15 insertions(+), 15 deletions(-)

diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c
index d0fe2b0d5e71..5d70c7075c3a 100644
--- a/sys/arm64/broadcom/genet/if_genet.c
+++ b/sys/arm64/broadcom/genet/if_genet.c
@@ -279,21 +279,6 @@ gen_attach(device_t dev)
 		goto fail;
 	}
 
-	/* Install interrupt handlers */
-	error = bus_setup_intr(dev, sc->res[_RES_IRQ1],
-	    INTR_TYPE_NET | INTR_MPSAFE, NULL, gen_intr, sc, &sc->ih);
-	if (error != 0) {
-		device_printf(dev, "cannot setup interrupt handler1\n");
-		goto fail;
-	}
-
-	error = bus_setup_intr(dev, sc->res[_RES_IRQ2],
-	    INTR_TYPE_NET | INTR_MPSAFE, NULL, gen_intr2, sc, &sc->ih2);
-	if (error != 0) {
-		device_printf(dev, "cannot setup interrupt handler2\n");
-		goto fail;
-	}
-
 	/* Setup ethernet interface */
 	sc->ifp = if_alloc(IFT_ETHER);
 	if_setsoftc(sc->ifp, sc);
@@ -310,6 +295,21 @@ gen_attach(device_t dev)
 	    IFCAP_HWCSUM_IPV6);
 	if_setcapenable(sc->ifp, if_getcapabilities(sc->ifp));
 
+	/* Install interrupt handlers */
+	error = bus_setup_intr(dev, sc->res[_RES_IRQ1],
+	    INTR_TYPE_NET | INTR_MPSAFE, NULL, gen_intr, sc, &sc->ih);
+	if (error != 0) {
+		device_printf(dev, "cannot setup interrupt handler1\n");
+		goto fail;
+	}
+
+	error = bus_setup_intr(dev, sc->res[_RES_IRQ2],
+	    INTR_TYPE_NET | INTR_MPSAFE, NULL, gen_intr2, sc, &sc->ih2);
+	if (error != 0) {
+		device_printf(dev, "cannot setup interrupt handler2\n");
+		goto fail;
+	}
+
 	/* Attach MII driver */
 	mii_flags = 0;
 	switch (sc->phy_mode)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202107051438.165EcKWh058400>