Print this page
7898 mdb's ::netstat doesn't print UDP conn_t pointer correctly

*** 641,663 **** uint_t opts = ncb->opts; int af = ncb->af; udp_t udp; conn_t *connp = &ncb->conn; char *state; 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); return (WALK_ERR); } connp->conn_udp = &udp; udp.udp_connp = connp; if (!((opts & NETSTAT_ALL) || net_udp_active(&udp)) || (af == AF_INET && !net_udp_ipv4(&udp)) || --- 641,664 ---- 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); } ! 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,682 **** else if (udp.udp_state == TS_DATA_XFER) state = "CONNECTED"; else state = "UNKNOWN"; ! mdb_printf("%0?p %10s ", (uintptr_t)connp->conn_udp, 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) { --- 673,683 ---- else if (udp.udp_state == TS_DATA_XFER) state = "CONNECTED"; else state = "UNKNOWN"; ! 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) {