Date: Wed, 22 Oct 2003 13:41:57 -0400 From: Gerrit Nagelhout <gnagelhout@sandvine.com> To: freebsd-net@freebsd.org Subject: Non-contiguous ifIndex problems with ifMib sysctl Message-ID: <FE045D4D9F7AED4CBFF1B3B813C85337021AAECB@mail.sandvine.com>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?FE045D4D9F7AED4CBFF1B3B813C85337021AAECB>