The branch main has been updated by karels:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=13604fb0fd43c85e6bb3a0ad6400a684f150bdea

commit 13604fb0fd43c85e6bb3a0ad6400a684f150bdea
Author:     Mike Karels <kar...@freebsd.org>
AuthorDate: 2021-06-20 16:10:26 +0000
Commit:     Mike Karels <kar...@freebsd.org>
CommitDate: 2021-06-20 16:17:13 +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)
    MFC after:      3 days
---
 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)
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to