PERFORCE change 165604 for review

Gabor Pali pgj at FreeBSD.org
Sat Jul 4 18:36:09 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=165604

Change 165604 by pgj at petymeg-current on 2009/07/04 18:35:38

	- Fix KVM extraction
	- Rename kread() to kread_data() to avoid confusions with
	  kread() in netstat when debugging

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#38 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#22 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#24 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#38 (text+ko) ====

@@ -286,7 +286,7 @@
 }
 
 #define KREAD(off, buf, len) do {				    \
-	if (kread(kvm, (uintptr_t)(off), (buf), (len)) != 0) {	    \
+	if (kread_data(kvm, (uintptr_t)(off), (buf), (len)) != 0) { \
 		return (-1);					    \
 	}							    \
 } while (0);
@@ -557,13 +557,22 @@
 {
 	kvm_t	*kvm;
 	int	result, i;
-	struct nlist nls[MAX(nlUNP_MAX, nlINP_MAX) + 1];
+	struct nlist nls[nlUNP_MAX + 1 + nlINP_MAX + 1];
 
-	nls[0].n_name = NULL;
+	bzero(nls, sizeof(nls));
 	if (flags & NETSTAT_SOCKET_KVM) {
 		/* Use KVM to retrieve data. */
 		kvm = (kvm_t *)kvm_handle;
 		switch (domain) {
+		case PF_UNSPEC:
+			for (i = 0; i < nlUNP_MAX; i++)
+				nls[i].n_name = strdup(unp_symbol[i]);
+			nls[nlUNP_MAX].n_name = NULL;
+			for (i = nlUNP_MAX + 1;
+			    i < (nlUNP_MAX + 1 + nlINP_MAX + 1); i++)
+				nls[i].n_name = strdup(inp_symbol[i]);
+			nls[nlUNP_MAX + 1 + nlINP_MAX].n_name = NULL;
+			break;
 		case PF_LOCAL:
 			for (i = 0; i < nlUNP_MAX; i++)
 				nls[i].n_name = strdup(unp_symbol[i]);
@@ -590,12 +599,12 @@
 		result = netstat_local_sockets(0, list, kvm, nls, flags);
 		if (result < 0)
 			goto end;
-		result = netstat_inet_sockets(PF_INET, 0, list, kvm, nls,
-		    flags);
+		result = netstat_inet_sockets(PF_INET, 0, list, kvm,
+		    &nls[nlUNP_MAX + 1], flags);
 		if (result < 0)
 			goto end;
-		result = netstat_inet_sockets(PF_INET6, 0, list, kvm, nls,
-		    flags);
+		result = netstat_inet_sockets(PF_INET6, 0, list, kvm,
+		    &nls[nlUNP_MAX + 1], flags);
 		if (result < 0)
 			goto end;
 		break;
@@ -605,8 +614,8 @@
 		break;
 	case PF_INET:
 	case PF_INET6:
-		result = (netstat_inet_sockets(domain, protocol, list, kvm, nls,
-		    flags));
+		result = (netstat_inet_sockets(domain, protocol, list, kvm,
+		    nls, flags));
 		goto end;
 		break;
 	default:
@@ -616,7 +625,8 @@
 	}
 
 end:
-	for (i = 0; nls[i].n_name != NULL && i < MAX(nlUNP_MAX, nlINP_MAX); i++)
+	for (i = 0; nls[i].n_name != NULL && i < nlUNP_MAX + nlINP_MAX + 2;
+	    i++)
 		free(nls[i].n_name);
 	return (result);
 }

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#22 (text+ko) ====

@@ -132,7 +132,7 @@
 	struct socket_type	    *sti_next;
 };
 
-int kread(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size);
+int kread_data(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size);
 int kread_string(kvm_t *kvm, u_long kvm_pointer, char *buffer, int buflen);
 
 void		    _netstat_stl_empty(struct socket_type_list *list);

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#24 (text+ko) ====

@@ -39,7 +39,7 @@
 #include "netstat_internal.h"
 
 int
-kread(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size)
+kread_data(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size)
 {
 	ssize_t ret;
 
@@ -103,10 +103,11 @@
 	xso->so_linger = so->so_linger;
 	xso->so_state = so->so_state;
 	xso->so_pcb = so->so_pcb;
-	if (kread(kvm, (uintptr_t)so->so_proto, &proto, sizeof(proto)) != 0)
+	if (kread_data(kvm, (uintptr_t)so->so_proto, &proto, sizeof(proto))
+	    != 0)
 		return (-1);
 	xso->xso_protocol = proto.pr_protocol;
-	if (kread(kvm, (uintptr_t)proto.pr_domain, &domain,
+	if (kread_data(kvm, (uintptr_t)proto.pr_domain, &domain,
 	    sizeof(domain)) != 0)
 		return (-1);
 	xso->xso_family = domain.dom_family;


More information about the p4-projects mailing list