cvs commit: src/sys/net if.c if_arcsubr.c if_arp.h if_bridge.c
if_ef.c if_ethersubr.c if_fddisubr.c if_fwsubr.c if_i
wpaul at FreeBSD.ORG
Mon Nov 14 15:36:17 GMT 2005
> Hi Bill,
> On Sun, Nov 13, 2005 at 09:23:45PM +0000, Bill Paul wrote:
> > [...]
> > > sys/compat/ndis subr_ndis.c
> > [...]
> > > - Store pointer to the link-level address right in "struct ifnet"
> > > rather than in ifindex_table; all (except one) accesses are
> > > through ifp anyway. IF_LLADDR() works faster, and all (except
> > > one) ifaddr_byindex() users were converted to use ifp->if_addr.
> > >
> > > - Stop storing a (pointer to) Ethernet address in "struct arpcom",
> > > and drop the IFP2ENADDR() macro; all users have been converted
> > > to use IF_LLADDR() instead.
> > For the umpity umpth time: I'm trying to keep it so that the same
> > NDIS code will compile on 7.x, 6.x and 5.x. Having one set of code
> > means I don't need to go nuts doing merges from one branch to the
> > next: I can just pull the files over and be done with it.
> > You did
> > not consider this when modifying subr_ndis.c, and now you have broken
> > it for the 6.x and 5.x branches.
> Yes I did.
> > More importantly, you broke it in
> > a very subtle way that only shows up as a kernel panic a runtime.
> Can you please give me more details about this panic?
I already fixed it, but to see it, take the previous version of
subr_ndis.c (with your change) and compile it on a 6.0 system, then
try loading an NDIS driver. The problem is that IF_LLADDR() exists
on earlier versions of FreeBSD, but using it on 6.0 leads to a
NULL pointer dereference in NdisReadNetworkAddress() at driver
load time. On 6.0, you have to continue using IFP2ENADDR() anyway
(until this change is merged). I can only assume that on 6.x,
using IF_LLADDR() in this circumstance references a pointer that
hasn't been initialized yet.
-Bill Paul (510) 749-2329 | Senior Engineer, Master of Unix-Fu
wpaul at windriver.com | Wind River Systems
<adamw> you're just BEGGING to face the moose
More information about the cvs-src