Re: how should agents handle an 'out-of-range' index ?
Fulko Hew <[email protected]>
| Newsgroups | gmane.network.net-snmp.user |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Sep 15, 2010 at 12:01 PM, Fulko Hew <[email protected]> wrote: > On Wed, Sep 15, 2010 at 11:23 AM, Dave Shield <[email protected]>wrote: > >> On 14 September 2010 16:55, Fulko Hew <[email protected]> wrote: >> > When I ran this test, the agent died and needed to be restarted. >> > The variable I was querying was: >> > >> > 1.3.6.1.4.1.2021.8.1.103.4294967295 aka 'UCD-SNMP-MIB:extIndex'. >> > The same style of problem exists and I've attached a similar set of patches for ./agent/mibgroup/ucd-snmp/disk.c tested with: snmpgetnext -v1 -cpublic -Ir localhost 1.3.6.1.4.1.2021.9.1.101.4294967294 A similar problem may exist elsewhere, but these have been the only two I've stumbled across using my automated client tester. Fulko ------------------------------------------------------------------------------ Start uncovering the many advantages of virtual appliances and start using them to simplify application deployment and accelerate your shift to cloud computing. http://p.sf.net/sfu/novell-sfdev2dev _______________________________________________ Net-snmp-users mailing list [email protected] Please see the following page to unsubscribe or change other options: https://lists.sourceforge.net/lists/listinfo/net-snmp-users
disk.c.diff
(text/x-patch, 1.5 KB)
--- disk.c.orig 2010-09-15 14:08:02.000000000 -0400
+++ disk.c 2010-09-15 14:08:06.000000000 -0400
@@ -167,9 +167,9 @@
#define MAX_INT_32 0x7fffffff
#define MAX_UINT_32 0xffffffff
-int numdisks;
+unsigned int numdisks;
int allDisksIncluded = 0;
-int maxdisks = 0;
+unsigned int maxdisks = 0;
struct diskpart *disks;
struct variable2 extensible_disk_variables[] = {
@@ -238,7 +238,7 @@
static void
disk_free_config(void)
{
- int i;
+ unsigned int i;
numdisks = 0;
for (i = 0; i < maxdisks; i++) { /* init/erase disk db */
@@ -429,7 +429,7 @@
int disk_exists(char *path)
{
- int index;
+ unsigned int index;
for(index = 0; index < numdisks; index++) {
DEBUGMSGTL(("ucd-snmp/disk", "Checking for %s. Found %s at %d\n", path, disks[index].path, index));
if(strcmp(path, disks[index].path) == 0) {
@@ -808,7 +808,8 @@
int exact,
size_t * var_len, WriteMethod ** write_method)
{
- int ret, disknum = 0;
+ int ret;
+ unsigned int disknum = 0;
struct dsk_entry entry;
static long long_ret;
static char errmsg[300];
@@ -818,6 +819,8 @@
(vp, name, length, exact, var_len, write_method, numdisks))
return (NULL);
disknum = name[*length - 1] - 1;
+ if (disknum > maxdisks)
+ return NULL;
switch (vp->magic) {
case MIBINDEX:
long_ret = disknum + 1;