kernel trap 12 with interrupts disabled [bge0 on 7.2R]

John Baldwin jhb at freebsd.org
Fri May 15 15:42:47 UTC 2009


On Friday 15 May 2009 11:36:18 am Martin wrote:
> 
> Hi John,
> 
> one more thing that I noticed. It seems that the netmask passed to the
> procedure rt_maskedcopy is invalid. Cannot dereference the pointer.
> 
> I went one frame up and I've looked at the control flow of the parent
> routine rtrequest1_fib. This routine passes the netmask, but before it
> does that it went with req=11 (RTM_RESOLVE) through this piece of code:
> 
> /usr/src/sys/net/route.c:985
> 
> case RTM_RESOLVE:
>         if (ret_nrt == NULL || (rt = *ret_nrt) == NULL)
>                   senderr(EINVAL);
>         ifa = rt->rt_ifa;
>         /* XXX locking? */
>         flags = rt->rt_flags &
>                 ~(RTF_CLONING | RTF_STATIC);
>         flags |= RTF_WASCLONED;
>         gateway = rt->rt_gateway;
>         if ((netmask = rt->rt_genmask) == NULL)
>                 flags |= RTF_HOST;
>         goto makeroute;
> 
> Is this a locking problem?

A GPF on amd64 usually happens because the pointer has high bits corrupt (the 
high N bits on amd64 must be either all zeros or all ones).  In my experience 
those are all caused by hardware issues rather than races or bugs.

-- 
John Baldwin


More information about the freebsd-stable mailing list