From 4ce92b4f38c55931e1573711c6b6f03d996c5812 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Tue, 28 Feb 2012 13:31:46 -0800 Subject: [PATCH] Fixed overrun bug in eth_devices. Fixed device name compare in eth_getname_byname to compare the whole name Removed unused num field in eth_list structure Extended the number of devices supported since some platforms may have many libpcap accessable devices but only a few basic Ethernet ones --- sim_ether.c | 34 ++++++++++++++-------------------- sim_ether.h | 3 +-- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/sim_ether.c b/sim_ether.c index 454be442..2de2564f 100644 --- a/sim_ether.c +++ b/sim_ether.c @@ -560,7 +560,7 @@ char* eth_getname(int number, char* name) ETH_LIST list[ETH_MAX_DEVICE]; int count = eth_devices(ETH_MAX_DEVICE, list); - if (count <= number) return 0; + if (count <= number) return NULL; strcpy(name, list[number].name); return name; } @@ -587,7 +587,7 @@ char* eth_getname_bydesc(char* desc, char* name) return name; } /* not found */ - return 0; + return NULL; } /* strncasecmp() is not available on all platforms */ @@ -621,16 +621,13 @@ char* eth_getname_byname(char* name, char* temp) found = 0; n = strlen(name); for (i=0; i min) min = len; for (i=0; inext) { + for (i=0, dev=alldevs; dev && (i < max); dev=dev->next, ++i) { if ((dev->flags & PCAP_IF_LOOPBACK) || (!strcmp("any", dev->name))) continue; - list[i].num = i; - sprintf(list[i].name, "%s", dev->name); + strncpy(list[i].name, dev->name, sizeof(list[i].name)-1); if (dev->description) - sprintf(list[i].desc, "%s", dev->description); + strncpy(list[i].desc, dev->description, sizeof(list[i].desc)-1); else - sprintf(list[i].desc, "%s", "No description available"); - if (i++ >= max) break; + strncpy(list[i].desc, "No description available", sizeof(list[i].desc)-1); } /* free device list */ diff --git a/sim_ether.h b/sim_ether.h index 2314e835..8200116e 100644 --- a/sim_ether.h +++ b/sim_ether.h @@ -130,7 +130,7 @@ #define ETH_MIN_PACKET 60 /* minimum ethernet packet size */ #define ETH_MAX_PACKET 1514 /* maximum ethernet packet size */ #define ETH_MAX_JUMBO_FRAME 65536 /* maximum ethernet jumbo frame size (or Offload Segment Size) */ -#define ETH_MAX_DEVICE 10 /* maximum ethernet devices */ +#define ETH_MAX_DEVICE 20 /* maximum ethernet devices */ #define ETH_CRC_SIZE 4 /* ethernet CRC size */ #define ETH_FRAME_SIZE (ETH_MAX_PACKET+ETH_CRC_SIZE) /* ethernet maximum frame size */ #define ETH_MIN_JUMBO_FRAME ETH_MAX_PACKET /* Threshold size for Jumbo Frame Processing */ @@ -168,7 +168,6 @@ struct eth_queue { }; struct eth_list { - int num; char name[ETH_DEV_NAME_MAX]; char desc[ETH_DEV_DESC_MAX]; };