diff options
author | Keith M Wesolowski <wesolows@foobazco.org> | 2014-09-18 18:03:35 +0000 |
---|---|---|
committer | Robert Mustacchi <rm@joyent.com> | 2015-11-03 13:36:16 -0800 |
commit | 6357b94b54238e954e002562d0e89a2fefd982e1 (patch) | |
tree | b7774ba30aede7f60e3f5ef2c6f52cd642b2acc8 | |
parent | 260e9a87725c090ba5835b1f9f0b62fa2f96036f (diff) | |
download | illumos-joyent-6357b94b54238e954e002562d0e89a2fefd982e1.tar.gz |
6415 sockets created via t_open/t_bind not shown by pfiles
6432 TLI sockets aren't detected correctly by pfiles in a NGZ
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Garrett D'Amore <garrett@damore.org>
Reviewed by: Mohamed A. Khalfella <khalfella@gmail.com>
Approved by: Matthew Ahrens <mahrens@delphix.com>
-rw-r--r-- | usr/src/cmd/ptools/pfiles/pfiles.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/usr/src/cmd/ptools/pfiles/pfiles.c b/usr/src/cmd/ptools/pfiles/pfiles.c index fbe54fc0dd..0b84047806 100644 --- a/usr/src/cmd/ptools/pfiles/pfiles.c +++ b/usr/src/cmd/ptools/pfiles/pfiles.c @@ -271,15 +271,14 @@ show_file(void *data, prfdinfo_t *info) (mode & S_IFMT) == S_IFDOOR); if (Pstate(Pr) != PS_DEAD) { - char *dev; + char *dev = NULL; if ((mode & S_IFMT) == S_IFSOCK) dosocket(Pr, info->pr_fd); else if ((mode & S_IFMT) == S_IFIFO) dofifo(Pr, info->pr_fd); - if ((mode & S_IFMT) == S_IFCHR && - (dev = strrchr(info->pr_path, ':')) != NULL) { + if ((mode & S_IFMT) == S_IFCHR) { /* * There's no elegant way to determine * if a character device supports TLI, @@ -291,11 +290,20 @@ show_file(void *data, prfdinfo_t *info) "tcp", "tcp6", "udp", "udp6", NULL }; - dev++; /* skip past the `:' */ - for (i = 0; tlidevs[i] != NULL; i++) { - if (strcmp(dev, tlidevs[i]) == 0) { - dotli(Pr, info->pr_fd); - break; + /* global zone: /devices paths */ + dev = strrchr(info->pr_path, ':'); + /* also check the /dev path for zones */ + if (dev == NULL) + dev = strrchr(info->pr_path, '/'); + if (dev != NULL) { + dev++; /* skip past the `:' or '/' */ + + for (i = 0; tlidevs[i] != NULL; i++) { + if (strcmp(dev, tlidevs[i]) == + 0) { + dotli(Pr, info->pr_fd); + break; + } } } } @@ -796,9 +804,11 @@ dotli(struct ps_prochandle *Pr, int fd) strcmd.sc_cmd = TI_GETMYNAME; if (pr_ioctl(Pr, fd, _I_CMD, &strcmd, sizeof (strcmd)) == 0) - show_sockaddr("sockname", (void *)&strcmd.sc_buf, 0); + show_sockaddr("sockname", (void *)&strcmd.sc_buf, + (size_t)strcmd.sc_len); strcmd.sc_cmd = TI_GETPEERNAME; if (pr_ioctl(Pr, fd, _I_CMD, &strcmd, sizeof (strcmd)) == 0) - show_sockaddr("peername", (void *)&strcmd.sc_buf, 0); + show_sockaddr("peername", (void *)&strcmd.sc_buf, + (size_t)strcmd.sc_len); } |