X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Ftcpconns.c;h=8f40be6f786b13d901c4ee5847580c0a01db270e;hb=ff9e11ade5cfabf32c63fb19fc76cbbc4186bc5b;hp=0236c9d0fc6dbbf6ede8da7fcfa90709e65f3ac9;hpb=9817e7298bd6c364fa17347327af54adf048bd21;p=collectd.git diff --git a/src/tcpconns.c b/src/tcpconns.c index 0236c9d0..6bc33842 100644 --- a/src/tcpconns.c +++ b/src/tcpconns.c @@ -71,13 +71,10 @@ #if KERNEL_LINUX # include -/* sys/socket.h is necessary to compile when using netlink on older systems. */ -# include # include #if HAVE_LINUX_INET_DIAG_H # include #endif -# include # include /* #endif KERNEL_LINUX */ @@ -90,9 +87,6 @@ #if HAVE_SYS_TYPES_H # include #endif -#if HAVE_SYS_SOCKET_H -# include -#endif #if HAVE_NET_IF_H # include #endif @@ -113,7 +107,6 @@ /* This is for OpenBSD and NetBSD. */ #elif HAVE_LIBKVM_NLIST # include -# include # include # include # include @@ -290,7 +283,7 @@ static uint32_t count_total[TCP_STATE_MAX + 1]; static uint32_t sequence_number = 0; #endif -enum +static enum { SRC_DUNNO, SRC_NETLINK, @@ -392,10 +385,9 @@ static port_entry_t *conn_get_port_entry (uint16_t port, int create) if ((ret == NULL) && (create != 0)) { - ret = (port_entry_t *) malloc (sizeof (port_entry_t)); + ret = calloc (1, sizeof (*ret)); if (ret == NULL) return (NULL); - memset (ret, '\0', sizeof (port_entry_t)); ret->port = port; ret->next = port_list_head; @@ -419,18 +411,18 @@ static void conn_reset_port_entry (void) /* If this entry was created while reading the files (ant not when handling * the configuration) remove it now. */ if ((pe->flags & (PORT_COLLECT_LOCAL - | PORT_COLLECT_REMOTE - | PORT_IS_LISTENING)) == 0) + | PORT_COLLECT_REMOTE + | PORT_IS_LISTENING)) == 0) { port_entry_t *next = pe->next; DEBUG ("tcpconns plugin: Removing temporary entry " - "for listening port %"PRIu16, pe->port); + "for listening port %"PRIu16, pe->port); if (prev == NULL) - port_list_head = next; + port_list_head = next; else - prev->next = next; + prev->next = next; sfree (pe); pe = next; @@ -442,6 +434,7 @@ static void conn_reset_port_entry (void) memset (pe->count_remote, '\0', sizeof (pe->count_remote)); pe->flags &= ~PORT_IS_LISTENING; + prev = pe; pe = pe->next; } } /* void conn_reset_port_entry */ @@ -838,7 +831,7 @@ static int conn_read (void) return (-1); } - buffer = (char *) malloc (buffer_len); + buffer = malloc (buffer_len); if (buffer == NULL) { ERROR ("tcpconns plugin: malloc failed."); @@ -981,7 +974,9 @@ static int conn_read (void) #endif { /* Read the pcb pointed to by `next' into `inpcb' */ - kread ((u_long) next, &inpcb, sizeof (inpcb)); + status = kread ((u_long) next, &inpcb, sizeof (inpcb)); + if (status != 0) + return (-1); /* Advance `next' */ #if defined(__OpenBSD__) || (defined(__NetBSD_Version__) && __NetBSD_Version__ > 699002700) @@ -1004,7 +999,9 @@ static int conn_read (void) continue; #endif - kread ((u_long) inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb)); + status = kread ((u_long) inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb)); + if (status != 0) + return (-1); conn_handle_ports (ntohs(inpcb.inp_lport), ntohs(inpcb.inp_fport), tcpcb.t_state); } /* while (next != head) */