... without changing the address family at the same time Easier to see with diff -b
OK? diff --git if_pflow.c if_pflow.c index 8e95aaf753f..80758b60bd5 100644 --- if_pflow.c +++ if_pflow.c @@ -335,32 +335,35 @@ pflow_set(struct pflow_softc *sc, struct pflowreq *pflowr) } } - if (sc->sc_flowdst == NULL) { - switch (pflowr->flowdst.ss_family) { - case AF_INET: + switch (pflowr->flowdst.ss_family) { + case AF_INET: + if (sc->sc_flowdst == NULL) { if ((sc->sc_flowdst = malloc( sizeof(struct sockaddr_in), M_DEVBUF, M_NOWAIT)) == NULL) return (ENOMEM); - memcpy(sc->sc_flowdst, &pflowr->flowdst, - sizeof(struct sockaddr_in)); - sc->sc_flowdst->sa_len = sizeof(struct - sockaddr_in); - break; - case AF_INET6: + } + memcpy(sc->sc_flowdst, &pflowr->flowdst, + sizeof(struct sockaddr_in)); + sc->sc_flowdst->sa_len = sizeof(struct + sockaddr_in); + break; + case AF_INET6: + if (sc->sc_flowdst == NULL) { if ((sc->sc_flowdst = malloc( sizeof(struct sockaddr_in6), M_DEVBUF, M_NOWAIT)) == NULL) return (ENOMEM); - memcpy(sc->sc_flowdst, &pflowr->flowdst, - sizeof(struct sockaddr_in6)); - sc->sc_flowdst->sa_len = sizeof(struct - sockaddr_in6); - break; - default: - break; } + memcpy(sc->sc_flowdst, &pflowr->flowdst, + sizeof(struct sockaddr_in6)); + sc->sc_flowdst->sa_len = sizeof(struct + sockaddr_in6); + break; + default: + break; } + if (sc->sc_flowdst != NULL) { sc->send_nam->m_len = sc->sc_flowdst->sa_len; sa = mtod(sc->send_nam, struct sockaddr *); -- I'm not entirely sure you are real.