Non-contiguous ifIndex problems with ifMib sysctl

Gerrit Nagelhout gnagelhout at sandvine.com
Wed Oct 22 10:42:00 PDT 2003


Hi,

I am trying to debug a crash (null pointer access) in sysctl_ifdata (in
if_mib.c).  What I have noticed is that if interfaces (in this case vlans)
are created and destroyed dynamically, it is possible to create "holes" in
the ifnet_addrs structure.  For example, if I start with the following
interfaces:
1 em0
2 em1
3 lo0

and then do:
ifconfig vlan1 create
ifconfig vlan2 create
ifconfig vlan1 destroy

I end up with:
1 em0
2 em1
3 lo0
4 0
5 vlan2

In this case, the net.link.generic.system.ifcount is set to 4.  If an
application (like slurm) then calls sysctl on
net.link.generic.ifdata.<ifindex>, and loops from 1 to 5 for ifIndex, it
will crash when it gets to 4 because there are no checks for these holes,
and 4 is less than if_index.
I have also noticed that an snmpwalk to a system like this will have the
proper interface count, but will only show the interfaces before the hole.
It's easy enough to add the null check in sysctl_ifdata, and just return
ENOENT, but that won't fix the snmpwalk problem.  How should applications
generally deal with this?

Thanks,

Gerrit




More information about the freebsd-net mailing list