lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20180224191607.23892-3-stephen@networkplumber.org>
Date:   Sat, 24 Feb 2018 11:16:06 -0800
From:   Stephen Hemminger <stephen@...workplumber.org>
To:     netdev@...r.kernel.org
Cc:     ikomyagin@...il.com, Stephen Hemminger <stephen@...workplumber.org>
Subject: [PATCH iproute2 2/3] ss: convert socket statistics to unsigned

The kernel keeps these values as unsigned not signed integer.

Signed-off-by: Stephen Hemminger <stephen@...workplumber.org>
---
 misc/ss.c | 96 +++++++++++++++++++++++++++++++--------------------------------
 1 file changed, 48 insertions(+), 48 deletions(-)

diff --git a/misc/ss.c b/misc/ss.c
index fefe5c813c44..4c7057198eb2 100644
--- a/misc/ss.c
+++ b/misc/ss.c
@@ -674,10 +674,10 @@ next:
 /* Get stats from slab */
 
 struct slabstat {
-	int socks;
-	int tcp_ports;
-	int tcp_tws;
-	int tcp_syns;
+	unsigned int socks;
+	unsigned int tcp_ports;
+	unsigned int tcp_tws;
+	unsigned int tcp_syns;
 };
 
 static struct slabstat slabstat;
@@ -687,13 +687,14 @@ static int get_slabstat(struct slabstat *s)
 	char buf[256];
 	FILE *fp;
 	int cnt;
-	static int slabstat_valid;
+	static bool slabstat_valid;
 	static const char * const slabstat_ids[] = {
 		"sock",
 		"tcp_bind_bucket",
 		"tcp_tw_bucket",
 		"tcp_open_request",
 	};
+	unsigned int *vals = (unsigned int *) s;
 
 	if (slabstat_valid)
 		return 0;
@@ -715,7 +716,7 @@ static int get_slabstat(struct slabstat *s)
 
 		for (i = 0; i < ARRAY_SIZE(slabstat_ids); i++) {
 			if (memcmp(buf, slabstat_ids[i], strlen(slabstat_ids[i])) == 0) {
-				sscanf(buf, "%*s%d", ((int *)s) + i);
+				sscanf(buf, "%*s%u", vals + i);
 				cnt--;
 				break;
 			}
@@ -724,7 +725,7 @@ static int get_slabstat(struct slabstat *s)
 			break;
 	}
 
-	slabstat_valid = 1;
+	slabstat_valid = true;
 
 	fclose(fp);
 	return 0;
@@ -3287,8 +3288,7 @@ static int tcp_show(struct filter *f)
 	 */
 	if (1) {
 		get_slabstat(&slabstat);
-
-		int guess = slabstat.socks+slabstat.tcp_syns;
+		unsigned int guess = slabstat.socks + slabstat.tcp_syns;
 
 		if (f->states&(1<<SS_TIME_WAIT))
 			guess += slabstat.tcp_tws;
@@ -4317,7 +4317,7 @@ static int handle_follow_request(struct filter *f)
 	return ret;
 }
 
-static int get_snmp_int(char *proto, char *key, int *result)
+static int get_snmp_int(const char *proto, const char *key, unsigned int *result)
 {
 	char buf[1024];
 	FILE *fp;
@@ -4350,7 +4350,7 @@ static int get_snmp_int(char *proto, char *key, int *result)
 		while ((p = strchr(p, ' ')) != NULL) {
 			p++;
 			if (--pos == 0) {
-				sscanf(p, "%d", result);
+				sscanf(p, "%u", result);
 				fclose(fp);
 				return 0;
 			}
@@ -4366,21 +4366,21 @@ static int get_snmp_int(char *proto, char *key, int *result)
 /* Get stats from sockstat */
 
 struct ssummary {
-	int socks;
-	int tcp_mem;
-	int tcp_total;
-	int tcp_orphans;
-	int tcp_tws;
-	int tcp4_hashed;
-	int udp4;
-	int raw4;
-	int frag4;
-	int frag4_mem;
-	int tcp6_hashed;
-	int udp6;
-	int raw6;
-	int frag6;
-	int frag6_mem;
+	unsigned int socks;
+	unsigned int tcp_mem;
+	unsigned int tcp_total;
+	unsigned int tcp_orphans;
+	unsigned int tcp_tws;
+	unsigned int tcp4_hashed;
+	unsigned int udp4;
+	unsigned int raw4;
+	unsigned int frag4;
+	unsigned int frag4_mem;
+	unsigned int tcp6_hashed;
+	unsigned int udp6;
+	unsigned int raw6;
+	unsigned int frag6;
+	unsigned int frag6_mem;
 };
 
 static void get_sockstat_line(char *line, struct ssummary *s)
@@ -4391,23 +4391,23 @@ static void get_sockstat_line(char *line, struct ssummary *s)
 		return;
 
 	if (strcmp(id, "sockets:") == 0)
-		sscanf(rem, "%*s%d", &s->socks);
+		sscanf(rem, "%*s%u", &s->socks);
 	else if (strcmp(id, "UDP:") == 0)
-		sscanf(rem, "%*s%d", &s->udp4);
+		sscanf(rem, "%*s%u", &s->udp4);
 	else if (strcmp(id, "UDP6:") == 0)
-		sscanf(rem, "%*s%d", &s->udp6);
+		sscanf(rem, "%*s%u", &s->udp6);
 	else if (strcmp(id, "RAW:") == 0)
-		sscanf(rem, "%*s%d", &s->raw4);
+		sscanf(rem, "%*s%u", &s->raw4);
 	else if (strcmp(id, "RAW6:") == 0)
-		sscanf(rem, "%*s%d", &s->raw6);
+		sscanf(rem, "%*s%u", &s->raw6);
 	else if (strcmp(id, "TCP6:") == 0)
-		sscanf(rem, "%*s%d", &s->tcp6_hashed);
+		sscanf(rem, "%*s%u", &s->tcp6_hashed);
 	else if (strcmp(id, "FRAG:") == 0)
-		sscanf(rem, "%*s%d%*s%d", &s->frag4, &s->frag4_mem);
+		sscanf(rem, "%*s%u%*s%u", &s->frag4, &s->frag4_mem);
 	else if (strcmp(id, "FRAG6:") == 0)
-		sscanf(rem, "%*s%d%*s%d", &s->frag6, &s->frag6_mem);
+		sscanf(rem, "%*s%u%*s%u", &s->frag6, &s->frag6_mem);
 	else if (strcmp(id, "TCP:") == 0)
-		sscanf(rem, "%*s%d%*s%d%*s%d%*s%d%*s%d",
+		sscanf(rem, "%*s%u%*s%u%*s%u%*s%u%*s%u",
 		       &s->tcp4_hashed,
 		       &s->tcp_orphans, &s->tcp_tws, &s->tcp_total, &s->tcp_mem);
 }
@@ -4436,8 +4436,8 @@ static int get_sockstat(struct ssummary *s)
 
 static int print_summary(void)
 {
+	unsigned int tcp_estab;
 	struct ssummary s;
-	int tcp_estab;
 
 	if (get_sockstat(&s) < 0)
 		perror("ss: get_sockstat");
@@ -4446,9 +4446,9 @@ static int print_summary(void)
 
 	get_slabstat(&slabstat);
 
-	printf("Total: %d (kernel %d)\n", s.socks, slabstat.socks);
+	printf("Total: %u (kernel %u)\n", s.socks, slabstat.socks);
 
-	printf("TCP:   %d (estab %d, closed %d, orphaned %d, synrecv %d, timewait %d/%d), ports %d\n",
+	printf("TCP:   %u (estab %u, closed %u, orphaned %u, synrecv %u, timewait %u/%u), ports %u\n",
 	       s.tcp_total + slabstat.tcp_syns + s.tcp_tws,
 	       tcp_estab,
 	       s.tcp_total - (s.tcp4_hashed+s.tcp6_hashed-s.tcp_tws),
@@ -4460,16 +4460,16 @@ static int print_summary(void)
 
 	printf("\n");
 	printf("Transport Total     IP        IPv6\n");
-	printf("*	  %-9d %-9s %-9s\n", slabstat.socks, "-", "-");
-	printf("RAW	  %-9d %-9d %-9d\n", s.raw4+s.raw6, s.raw4, s.raw6);
-	printf("UDP	  %-9d %-9d %-9d\n", s.udp4+s.udp6, s.udp4, s.udp6);
-	printf("TCP	  %-9d %-9d %-9d\n", s.tcp4_hashed+s.tcp6_hashed, s.tcp4_hashed, s.tcp6_hashed);
-	printf("INET	  %-9d %-9d %-9d\n",
-	       s.raw4+s.udp4+s.tcp4_hashed+
-	       s.raw6+s.udp6+s.tcp6_hashed,
-	       s.raw4+s.udp4+s.tcp4_hashed,
-	       s.raw6+s.udp6+s.tcp6_hashed);
-	printf("FRAG	  %-9d %-9d %-9d\n", s.frag4+s.frag6, s.frag4, s.frag6);
+	printf("*	  %-9u %-9s %-9s\n", slabstat.socks, "-", "-");
+	printf("RAW	  %-9u %-9u %-9u\n", s.raw4+s.raw6, s.raw4, s.raw6);
+	printf("UDP	  %-9u %-9u %-9u\n", s.udp4+s.udp6, s.udp4, s.udp6);
+	printf("TCP	  %-9u %-9u %-9u\n", s.tcp4_hashed+s.tcp6_hashed, s.tcp4_hashed, s.tcp6_hashed);
+	printf("INET	  %-9u %-9u %-9u\n",
+	       s.raw4+s.udp4 + s.tcp4_hashed + s.raw6+s.udp6 + s.tcp6_hashed,
+	       s.raw4+s.udp4 + s.tcp4_hashed,
+	       s.raw6+s.udp6 + s.tcp6_hashed);
+	printf("FRAG	  %-9u %-9u %-9u\n",
+	       s.frag4+s.frag6, s.frag4, s.frag6);
 
 	printf("\n");
 
-- 
2.16.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ