svn commit: r240595 - head/usr.sbin/bsnmpd/modules/snmp_hostres
John Rumbaugh
bawitabooks at gmail.com
Mon Sep 17 08:03:07 UTC 2012
<http://i.imgur.com/vZXZW.jpg>
http://www.chumleaf.com
On Monday, September 17, 2012 12:34:10 AM UTC-7, Mikolaj Golub wrote:
>
> Author: trociny
> Date: Mon Sep 17 07:32:53 2012
> New Revision: 240595
> URL: http://svn.freebsd.org/changeset/base/240595
>
> Log:
> In snmp_hostres, device_map table is used for consistent device table
> indexing. When a device has gone it is not removed from device_map
> table but just its entry_p field is set to NULL.
>
> So when traversing device_map in disk_OS_get_ATA_disks() and
> disk_OS_get_MD_disks() check for entry_p being NULL, otherwise the
> bsnmpd crash is possible when a removed map entry is dereferenced.
>
> Before the fix, for disk_OS_get_ATA_disks() the crash could be easily
> reproduced running:
>
> atacontrol detach ata1
>
> The crash was not observed in disk_OS_get_MD_disks() because currently
> snmp_hostres does no see md(4) disks: to get the device list it uses
> devinfo(3), which does not return md devices.
>
> Reported by: Miroslav Lachman 000.fbsd quip.cz
> MFC after: 1 week
>
> Modified:
> head/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_diskstorage_tbl.c
>
> Modified:
> head/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_diskstorage_tbl.c
> ==============================================================================
>
> ---
> head/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_diskstorage_tbl.c Mon
> Sep 17 07:14:07 2012 (r240594)
> +++
> head/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_diskstorage_tbl.c Mon
> Sep 17 07:32:53 2012 (r240595)
> @@ -287,6 +287,9 @@ disk_OS_get_ATA_disks(void)
>
> /* Walk over the device table looking for ata disks */
> STAILQ_FOREACH(map, &device_map, link) {
> + /* Skip deleted entries. */
> + if (map->entry_p == NULL)
> + continue;
> for (found = lookup; found->media != DSM_UNKNOWN;
> found++) {
> if (strncmp(map->name_key, found->dev_name,
> strlen(found->dev_name)) != 0)
> @@ -345,6 +348,9 @@ disk_OS_get_MD_disks(void)
>
> /* Look for md devices */
> STAILQ_FOREACH(map, &device_map, link) {
> + /* Skip deleted entries. */
> + if (map->entry_p == NULL)
> + continue;
> if (sscanf(map->name_key, "md%d", &unit) != 1)
> continue;
>
> _______________________________________________
> svn-s... at freebsd.org <javascript:> mailing list
> http://lists.freebsd.org/mailman/listinfo/svn-src-all
> To unsubscribe, send any mail to "svn-src-all... at freebsd.org <javascript:>"
>
>
More information about the svn-src-head
mailing list