summaryrefslogtreecommitdiff
path: root/usr/src/lib/libproc/common
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libproc/common')
-rw-r--r--usr/src/lib/libproc/common/proc_fd.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/usr/src/lib/libproc/common/proc_fd.c b/usr/src/lib/libproc/common/proc_fd.c
index e491934c16..6d5c09315a 100644
--- a/usr/src/lib/libproc/common/proc_fd.c
+++ b/usr/src/lib/libproc/common/proc_fd.c
@@ -155,7 +155,8 @@ proc_get_fdinfo(pid_t pid, int fd)
break;
}
- if ((l = read(ifd, info, st.st_size)) == -1) {
+ if (lseek(ifd, 0, SEEK_SET) != 0 ||
+ (l = read(ifd, info, st.st_size)) == -1) {
err = errno;
break;
}
@@ -164,6 +165,9 @@ proc_get_fdinfo(pid_t pid, int fd)
off = offsetof(prfdinfo_t, pr_misc);
+ if (l < off + sizeof (pr_misc_header_t))
+ continue;
+
while (off <= l - sizeof (pr_misc_header_t)) {
pr_misc_header_t *misc;