net-tools/net-tools-1.60-coverity.patch

268 lines
8.6 KiB
Diff

diff -up net-tools-1.60/ipmaddr.c.coverity net-tools-1.60/ipmaddr.c
--- net-tools-1.60/ipmaddr.c.coverity 2001-04-08 19:04:23.000000000 +0200
+++ net-tools-1.60/ipmaddr.c 2011-04-28 16:35:24.000000000 +0200
@@ -160,7 +160,11 @@ void read_dev_mcast(struct ma_info **res
len = parse_hex(hexa, (unsigned char*)&m.addr.data);
if (len >= 0) {
struct ma_info *ma = malloc(sizeof(m));
-
+ if (!ma) {
+ fprintf(stderr, "couldn't allocate memory\n");
+ fclose(fp);
+ return;
+ }
memcpy(ma, &m, sizeof(m));
ma->addr.bytelen = len;
ma->addr.bitlen = len<<3;
@@ -174,7 +178,7 @@ void read_dev_mcast(struct ma_info **res
void read_igmp(struct ma_info **result_p)
{
- struct ma_info m;
+ struct ma_info m, *ma = NULL;
char buf[256];
FILE *fp = fopen(_PATH_PROCNET_IGMP, "r");
@@ -188,8 +192,6 @@ void read_igmp(struct ma_info **result_p
m.addr.bytelen = 4;
while (fgets(buf, sizeof(buf), fp)) {
- struct ma_info *ma = malloc(sizeof(m));
-
if (buf[0] != '\t') {
sscanf(buf, "%d%s", &m.index, m.name);
continue;
@@ -201,6 +203,12 @@ void read_igmp(struct ma_info **result_p
sscanf(buf, "%08x%d", (__u32*)&m.addr.data, &m.users);
ma = malloc(sizeof(m));
+ if (!ma) {
+ fprintf(stderr, "couldn't allocate memory\n");
+ fclose(fp);
+ return;
+ }
+
memcpy(ma, &m, sizeof(m));
maddr_ins(result_p, ma);
}
@@ -232,6 +240,11 @@ void read_igmp6(struct ma_info **result_
len = parse_hex(hexa, (unsigned char*)&m.addr.data);
if (len >= 0) {
struct ma_info *ma = malloc(sizeof(m));
+ if (!ma) {
+ fprintf(stderr, "couldn't allocate memory\n");
+ fclose(fp);
+ return;
+ }
memcpy(ma, &m, sizeof(m));
diff -up net-tools-1.60/iptunnel.c.coverity net-tools-1.60/iptunnel.c
--- net-tools-1.60/iptunnel.c.coverity 2001-04-08 19:04:23.000000000 +0200
+++ net-tools-1.60/iptunnel.c 2011-04-28 15:26:06.000000000 +0200
@@ -485,6 +485,7 @@ static int do_tunnels_list(struct ip_tun
if ((ptr = strchr(buf, ':')) == NULL ||
(*ptr++ = 0, sscanf(buf, "%s", name) != 1)) {
fprintf(stderr, _("Wrong format of /proc/net/dev. Sorry.\n"));
+ fclose(fp);
return -1;
}
if (sscanf(ptr, "%ld%ld%ld%ld%ld%ld%ld%*d%ld%ld%ld%ld%ld%ld%ld",
@@ -521,6 +522,7 @@ static int do_tunnels_list(struct ip_tun
tx_packets, tx_bytes, tx_errs, tx_colls, tx_carrier, tx_drops);
}
}
+ fclose(fp);
return 0;
}
diff -up net-tools-1.60/lib/inet.c.coverity net-tools-1.60/lib/inet.c
--- net-tools-1.60/lib/inet.c.coverity 2000-05-22 23:27:13.000000000 +0200
+++ net-tools-1.60/lib/inet.c 2011-04-28 14:39:06.000000000 +0200
@@ -211,10 +211,18 @@ static int INET_rresolve(char *name, siz
if ((ent == NULL) && (np == NULL))
safe_strncpy(name, inet_ntoa(sin->sin_addr), len);
pn = (struct addr *) malloc(sizeof(struct addr));
+ if (!pn) {
+ fprintf (stderr, "rresolve: couldn't allocate memory\n");
+ return (0);
+ }
pn->addr = *sin;
pn->next = INET_nn;
pn->host = host;
pn->name = (char *) malloc(strlen(name) + 1);
+ if (!pn->name) {
+ fprintf (stderr, "rresolve: couldn't allocate memory\n");
+ return (0);
+ }
strcpy(pn->name, name);
INET_nn = pn;
@@ -386,8 +394,11 @@ static int read_services(void)
while ((se = getservent())) {
/* Allocate a service entry. */
item = (struct service *) malloc(sizeof(struct service));
- if (item == NULL)
- perror("netstat");
+ if (item == NULL) {
+ perror("netstat: couldn't allocate memory");
+ endservent();
+ return (0);
+ }
item->name = strdup(se->s_name);
item->number = se->s_port;
@@ -405,8 +416,11 @@ static int read_services(void)
while ((pe = getprotoent())) {
/* Allocate a service entry. */
item = (struct service *) malloc(sizeof(struct service));
- if (item == NULL)
- perror("netstat");
+ if (item == NULL) {
+ perror("netstat: couldn't allocate memory");
+ endprotoent();
+ return (0);
+ }
item->name = strdup(pe->p_name);
item->number = htons(pe->p_proto);
add2list(&raw_name, item);
diff -up net-tools-1.60/lib/ipx_gr.c.coverity net-tools-1.60/lib/ipx_gr.c
--- net-tools-1.60/lib/ipx_gr.c.coverity 2011-04-21 14:00:20.000000000 +0200
+++ net-tools-1.60/lib/ipx_gr.c 2011-04-28 14:16:49.000000000 +0200
@@ -38,7 +38,7 @@ int IPX_rprint(int options)
char net[128], router_net[128];
char router_node[128];
int num;
- FILE *fp = fopen(_PATH_PROCNET_IPX_ROUTE, "r");
+ FILE *fp = NULL;
struct aftype *ap;
struct sockaddr sa;
@@ -47,6 +47,7 @@ int IPX_rprint(int options)
return (-1);
}
+ fp = fopen(_PATH_PROCNET_IPX_ROUTE, "r");
if (!fp) {
perror(_PATH_PROCNET_IPX_ROUTE);
printf(_("IPX not configured in this system.\n"));
diff -up net-tools-1.60/lib/masq_info.c.coverity net-tools-1.60/lib/masq_info.c
--- net-tools-1.60/lib/masq_info.c.coverity 2011-04-21 14:00:20.000000000 +0200
+++ net-tools-1.60/lib/masq_info.c 2011-04-28 15:34:06.000000000 +0200
@@ -208,10 +208,9 @@ int ip_masq_info(int numeric_host, int n
}
for (i = 0; i < ntotal; i++)
print_masq(&(mslist[i]), numeric_host, numeric_port, ext);
- if (mslist)
- free(mslist);
-
}
+ if (mslist)
+ free(mslist);
return 0;
}
#endif
diff -up net-tools-1.60/lib/netrom_gr.c.coverity net-tools-1.60/lib/netrom_gr.c
--- net-tools-1.60/lib/netrom_gr.c.coverity 2000-10-28 12:59:42.000000000 +0200
+++ net-tools-1.60/lib/netrom_gr.c 2011-04-28 14:15:38.000000000 +0200
@@ -39,9 +39,7 @@ int NETROM_rprint(int options)
/*int ext = options & FLAG_EXT;
int numeric = options & FLAG_NUM_HOST; */
- f1 = fopen(_PATH_PROCNET_NR_NODES, "r");
if (!f1) perror(_PATH_PROCNET_NR_NODES);
- f2 = fopen(_PATH_PROCNET_NR_NEIGH, "r");
if (!f2) perror(_PATH_PROCNET_NR_NEIGH);
if (f1 == NULL || f2 == NULL) {
diff -up net-tools-1.60/lib/x25.c.coverity net-tools-1.60/lib/x25.c
--- net-tools-1.60/lib/x25.c.coverity 2011-04-21 14:00:20.000000000 +0200
+++ net-tools-1.60/lib/x25.c 2011-04-28 15:01:47.000000000 +0200
@@ -106,7 +106,8 @@ X25_input(int type, char *bufp, struct s
}
if (strlen(bufp) < 1 || strlen(bufp) > 15 || sigdigits > strlen(bufp)) {
- *p = '/';
+ if (p != NULL)
+ *p = '/';
strcpy(X25_errmsg, _("Invalid address"));
#ifdef DEBUG
fprintf(stderr, "x25_input(%s): %s !\n", bufp, X25_errmsg);
diff -up net-tools-1.60/nameif.c.coverity net-tools-1.60/nameif.c
--- net-tools-1.60/nameif.c.coverity 2011-04-21 14:00:20.000000000 +0200
+++ net-tools-1.60/nameif.c 2011-04-28 15:55:20.000000000 +0200
@@ -154,6 +154,7 @@ void readconf(void)
FILE *ifh;
char *p;
int n;
+ struct change *ch = NULL;
ifh = fopen(fname, "r");
if (!ifh)
@@ -163,7 +164,7 @@ void readconf(void)
linel = 0;
linenum = 1;
while (getdelim(&line, &linel, '\n', ifh) > 0) {
- struct change *ch = xmalloc(sizeof(struct change));
+
char pos[20];
sprintf(pos, _("line %d"), linenum);
@@ -178,6 +179,11 @@ void readconf(void)
n = strcspn(p, " \t");
if (n > IFNAMSIZ)
complain(_("interface name too long at line %d"), line);
+ ch = xmalloc(sizeof(struct change));
+ if (!ch) {
+ fclose(ifh);
+ complain(_("couldn't allocate memory at line %d"), line);
+ }
memcpy(ch->ifname, p, n);
ch->ifname[n] = 0;
p += n;
diff -up net-tools-1.60/netstat.c.coverity net-tools-1.60/netstat.c
--- net-tools-1.60/netstat.c.coverity 2011-04-21 14:00:20.000000000 +0200
+++ net-tools-1.60/netstat.c 2011-04-28 15:58:44.000000000 +0200
@@ -461,6 +461,8 @@ static void prg_cache_load(void)
PATH_FD_SUFFl+1);
strcpy(line + procfdlen + 1, direfd->d_name);
lnamelen=readlink(line,lname,sizeof(lname)-1);
+ if (lnamelen < 0)
+ continue;
lname[lnamelen] = '\0'; /*make it a null-terminated string*/
extract_type_1_socket_inode(lname, &inode, &status);
@@ -902,7 +904,7 @@ static int x25_info(void)
"ESTABLISHED",
"RECOVERY"
};
- if(!(f=fopen(_PATH_PROCNET_X25, "r")))
+ if(!f)
{
if (errno != ENOENT) {
perror(_PATH_PROCNET_X25);
@@ -1931,6 +1933,7 @@ static int ipx_info(void)
printf("\n");
if ((ap = get_afntype(AF_IPX)) == NULL) {
EINTERN("netstat.c", "AF_IPX missing");
+ fclose(f);
return (-1);
}
fgets(buf, 255, f);
@@ -1944,6 +1947,7 @@ static int ipx_info(void)
sport = ntohs(sport);
} else {
EINTERN("netstat.c", _PATH_PROCNET_IPX " sport format error");
+ fclose(f);
return (-1);
}
nc = 0;
@@ -1954,6 +1958,7 @@ static int ipx_info(void)
dport = ntohs(dport);
} else {
EINTERN("netstat.c", _PATH_PROCNET_IPX " dport format error");
+ fclose(f);
return (-1);
}
} else