Print this page
7898 mdb's ::netstat doesn't print UDP conn_t pointer correctly
@@ -641,23 +641,24 @@
uint_t opts = ncb->opts;
int af = ncb->af;
udp_t udp;
conn_t *connp = &ncb->conn;
char *state;
+ uintptr_t udp_kaddr;
if (mdb_vread(connp, sizeof (conn_t), kaddr) == -1) {
mdb_warn("failed to read conn_t at %p", kaddr);
return (WALK_ERR);
}
- if (mdb_vread(&udp, sizeof (udp_t),
- (uintptr_t)connp->conn_udp) == -1) {
- mdb_warn("failed to read conn_udp at %p",
- (uintptr_t)connp->conn_udp);
+ udp_kaddr = (uintptr_t)connp->conn_udp;
+ if (mdb_vread(&udp, sizeof (udp_t), udp_kaddr) == -1) {
+ mdb_warn("failed to read conn_udp at %p", udp_kaddr);
return (WALK_ERR);
}
+ /* Need to do these reassignments for the net_udp_*() routines below. */
connp->conn_udp = &udp;
udp.udp_connp = connp;
if (!((opts & NETSTAT_ALL) || net_udp_active(&udp)) ||
(af == AF_INET && !net_udp_ipv4(&udp)) ||
@@ -672,11 +673,11 @@
else if (udp.udp_state == TS_DATA_XFER)
state = "CONNECTED";
else
state = "UNKNOWN";
- mdb_printf("%0?p %10s ", (uintptr_t)connp->conn_udp, state);
+ mdb_printf("%0?p %10s ", udp_kaddr, state);
if (af == AF_INET) {
net_ipv4addrport_pr(&connp->conn_laddr_v6, connp->conn_lport);
mdb_printf(" ");
net_ipv4addrport_pr(&connp->conn_faddr_v6, connp->conn_fport);
} else if (af == AF_INET6) {