kern/130977: [netgraph][pf] kernel panic trap 12 on user
connect to VPN server
Oleg S
darkibot at gmail.com
Mon Apr 13 15:46:40 PDT 2009
i'm tried to reproduce bug with current patch, but it's not
reproduced. as i see bug is fixed. thanks.
2009/4/11 Max Laier <max at love2party.net>:
> The following reply was made to PR kern/130977; it has been noted by GNATS.
>
> From: Max Laier <max at love2party.net>
> To: bug-followup at freebsd.org,
> darkibot at gmail.com
> Cc:
> Subject: Re: kern/130977: [netgraph][pf] kernel panic trap 12 on user connect to VPN server
> Date: Sat, 11 Apr 2009 01:11:54 +0100
>
> --Boundary-00=_LB+3JRWytgyQ4AY
> Content-Type: text/plain;
> charset="us-ascii"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: inline
>
> Here is the MFC patch - if possible, please try and report back.
>
> --
> Max
>
> --Boundary-00=_LB+3JRWytgyQ4AY
> Content-Type: text/x-patch;
> charset="ISO-8859-1";
> name="mfc.ifg.patch"
> Content-Transfer-Encoding: 7bit
> Content-Disposition: attachment;
> filename="mfc.ifg.patch"
>
> Index: sys/net/if.c
> ===================================================================
> --- sys/net/if.c (revision 190905)
> +++ sys/net/if.c (working copy)
> @@ -128,6 +128,7 @@
> static void do_link_state_change(void *, int);
> static int if_getgroup(struct ifgroupreq *, struct ifnet *);
> static int if_getgroupmembers(struct ifgroupreq *);
> +static void if_delgroups(struct ifnet *);
> #ifdef INET6
> /*
> * XXX: declare here to avoid to include many inet6 related files..
> @@ -828,6 +829,7 @@
> rt_ifannouncemsg(ifp, IFAN_DEPARTURE);
> EVENTHANDLER_INVOKE(ifnet_departure_event, ifp);
> devctl_notify("IFNET", ifp->if_xname, "DETACH", NULL);
> + if_delgroups(ifp);
>
> IF_AFDATA_LOCK(ifp);
> for (dp = domains; dp; dp = dp->dom_next) {
> @@ -963,6 +965,53 @@
> }
>
> /*
> + * Remove an interface from all groups
> + */
> +static void
> +if_delgroups(struct ifnet *ifp)
> +{
> + struct ifg_list *ifgl;
> + struct ifg_member *ifgm;
> + char groupname[IFNAMSIZ];
> +
> + IFNET_WLOCK();
> + while (!TAILQ_EMPTY(&ifp->if_groups)) {
> + ifgl = TAILQ_FIRST(&ifp->if_groups);
> +
> + strlcpy(groupname, ifgl->ifgl_group->ifg_group, IFNAMSIZ);
> +
> + IF_ADDR_LOCK(ifp);
> + TAILQ_REMOVE(&ifp->if_groups, ifgl, ifgl_next);
> + IF_ADDR_UNLOCK(ifp);
> +
> + TAILQ_FOREACH(ifgm, &ifgl->ifgl_group->ifg_members, ifgm_next)
> + if (ifgm->ifgm_ifp == ifp)
> + break;
> +
> + if (ifgm != NULL) {
> + TAILQ_REMOVE(&ifgl->ifgl_group->ifg_members, ifgm,
> + ifgm_next);
> + free(ifgm, M_TEMP);
> + }
> +
> + if (--ifgl->ifgl_group->ifg_refcnt == 0) {
> + TAILQ_REMOVE(&ifg_head, ifgl->ifgl_group, ifg_next);
> + EVENTHANDLER_INVOKE(group_detach_event,
> + ifgl->ifgl_group);
> + free(ifgl->ifgl_group, M_TEMP);
> + }
> + IFNET_WUNLOCK();
> +
> + free(ifgl, M_TEMP);
> +
> + EVENTHANDLER_INVOKE(group_change_event, groupname);
> +
> + IFNET_WLOCK();
> + }
> + IFNET_WUNLOCK();
> +}
> +
> +/*
> * Stores all groups from an interface in memory pointed
> * to by data
> */
>
> --Boundary-00=_LB+3JRWytgyQ4AY--
> _______________________________________________
> freebsd-pf at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-pf
> To unsubscribe, send any mail to "freebsd-pf-unsubscribe at freebsd.org"
>
More information about the freebsd-pf
mailing list