Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 22 Oct 2003 11:09:28 -0700
From:      Brooks Davis <brooks@one-eyed-alien.net>
To:        Gerrit Nagelhout <gnagelhout@sandvine.com>
Cc:        freebsd-net@freebsd.org
Subject:   Re: Non-contiguous ifIndex problems with ifMib sysctl
Message-ID:  <20031022180927.GA7831@Odin.AC.HMC.Edu>
In-Reply-To: <FE045D4D9F7AED4CBFF1B3B813C85337021AAECB@mail.sandvine.com>
References:  <FE045D4D9F7AED4CBFF1B3B813C85337021AAECB@mail.sandvine.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--0OAP2g/MAC+5xKAE
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Wed, Oct 22, 2003 at 01:41:57PM -0400, Gerrit Nagelhout wrote:
> Hi,
>=20
> 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
>=20
> and then do:
> ifconfig vlan1 create
> ifconfig vlan2 create
> ifconfig vlan1 destroy
>=20
> I end up with:
> 1 em0
> 2 em1
> 3 lo0
> 4 0
> 5 vlan2
>=20
> 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?

This was fixed in current with ENOENT two years ago, but the author
forgot to MFC the change.  Given how long this has been broken (since we
got removable devices), I'm inclined to wait until after 4.9 comes out
to do the MFC rather then trying to get it in under the wire.

I don't see the behavior you describe with ifcount.  The ifcount sysctl
is just an export if_index which is the last index, not the number of
interfaces.  This might be considered a bug in ifcount's implementation.

-- Brooks

--=20
Any statement of the form "X is the one, true Y" is FALSE.
PGP fingerprint 655D 519C 26A7 82E7 2529  9BF0 5D8E 8BE9 F238 1AD4

--0OAP2g/MAC+5xKAE
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE/lsfOXY6L6fI4GtQRAiXaAJ4pEsaGWQ6KXZfO7jdj8qx7oxGBlgCffyRF
Eo9IQTNQQHWak/bTxZyyXrw=
=AoCd
-----END PGP SIGNATURE-----

--0OAP2g/MAC+5xKAE--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031022180927.GA7831>