Changeset View
Changeset View
Standalone View
Standalone View
lib/libprocstat/libprocstat.c
Show First 20 Lines • Show All 454 Lines • ▼ Show 20 Lines | procstat_vm_map_reader(void *token, vm_map_entry_t addr, vm_map_entry_t dest) | ||||
return (kvm_read_all(kd, (unsigned long)addr, dest, sizeof(*dest))); | return (kvm_read_all(kd, (unsigned long)addr, dest, sizeof(*dest))); | ||||
} | } | ||||
static struct filestat_list * | static struct filestat_list * | ||||
procstat_getfiles_kvm(struct procstat *procstat, struct kinfo_proc *kp, int mmapped) | procstat_getfiles_kvm(struct procstat *procstat, struct kinfo_proc *kp, int mmapped) | ||||
{ | { | ||||
struct file file; | struct file file; | ||||
struct filedesc filed; | struct filedesc filed; | ||||
struct pathsdesc pathsd; | |||||
struct fdescenttbl *fdt; | struct fdescenttbl *fdt; | ||||
struct pwd pwd; | struct pwd pwd; | ||||
unsigned long pwd_addr; | unsigned long pwd_addr; | ||||
struct vm_map_entry vmentry; | struct vm_map_entry vmentry; | ||||
struct vm_object object; | struct vm_object object; | ||||
struct vmspace vmspace; | struct vmspace vmspace; | ||||
vm_map_entry_t entryp; | vm_map_entry_t entryp; | ||||
vm_object_t objp; | vm_object_t objp; | ||||
struct vnode *vp; | struct vnode *vp; | ||||
struct filestat *entry; | struct filestat *entry; | ||||
struct filestat_list *head; | struct filestat_list *head; | ||||
kvm_t *kd; | kvm_t *kd; | ||||
void *data; | void *data; | ||||
int fflags; | int fflags; | ||||
unsigned int i; | unsigned int i; | ||||
int prot, type; | int prot, type; | ||||
size_t fdt_size; | size_t fdt_size; | ||||
unsigned int nfiles; | unsigned int nfiles; | ||||
bool haspwd; | bool haspwd; | ||||
assert(procstat); | assert(procstat); | ||||
kd = procstat->kd; | kd = procstat->kd; | ||||
if (kd == NULL) | if (kd == NULL) | ||||
return (NULL); | return (NULL); | ||||
if (kp->ki_fd == NULL) | if (kp->ki_fd == NULL || kp->ki_pd == NULL) | ||||
return (NULL); | return (NULL); | ||||
if (!kvm_read_all(kd, (unsigned long)kp->ki_fd, &filed, | if (!kvm_read_all(kd, (unsigned long)kp->ki_fd, &filed, | ||||
sizeof(filed))) { | sizeof(filed))) { | ||||
warnx("can't read filedesc at %p", (void *)kp->ki_fd); | warnx("can't read filedesc at %p", (void *)kp->ki_fd); | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
if (!kvm_read_all(kd, (unsigned long)kp->ki_pd, &pathsd, | |||||
sizeof(pathsd))) { | |||||
warnx("can't read pathsdesc at %p", (void *)kp->ki_pd); | |||||
return (NULL); | |||||
} | |||||
haspwd = false; | haspwd = false; | ||||
pwd_addr = (unsigned long)(FILEDESC_KVM_LOAD_PWD(&filed)); | pwd_addr = (unsigned long)(PATHSDESC_KVM_LOAD_PWD(&pathsd)); | ||||
if (pwd_addr != 0) { | if (pwd_addr != 0) { | ||||
if (!kvm_read_all(kd, pwd_addr, &pwd, sizeof(pwd))) { | if (!kvm_read_all(kd, pwd_addr, &pwd, sizeof(pwd))) { | ||||
warnx("can't read fd_pwd at %p", (void *)pwd_addr); | warnx("can't read fd_pwd at %p", (void *)pwd_addr); | ||||
return (NULL); | return (NULL); | ||||
} | } | ||||
haspwd = true; | haspwd = true; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 1,577 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
free(groups); | free(groups); | ||||
} | } | ||||
static int | static int | ||||
procstat_getumask_kvm(kvm_t *kd, struct kinfo_proc *kp, unsigned short *maskp) | procstat_getumask_kvm(kvm_t *kd, struct kinfo_proc *kp, unsigned short *maskp) | ||||
{ | { | ||||
struct filedesc fd; | struct pathsdesc pd; | ||||
assert(kd != NULL); | assert(kd != NULL); | ||||
assert(kp != NULL); | assert(kp != NULL); | ||||
if (kp->ki_fd == NULL) | if (kp->ki_pd == NULL) | ||||
return (-1); | return (-1); | ||||
if (!kvm_read_all(kd, (unsigned long)kp->ki_fd, &fd, sizeof(fd))) { | if (!kvm_read_all(kd, (unsigned long)kp->ki_pd, &pd, sizeof(pd))) { | ||||
warnx("can't read filedesc at %p for pid %d", kp->ki_fd, | warnx("can't read pathsdesc at %p for pid %d", kp->ki_pd, | ||||
kp->ki_pid); | kp->ki_pid); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
*maskp = fd.fd_cmask; | *maskp = pd.pd_cmask; | ||||
return (0); | return (0); | ||||
} | } | ||||
static int | static int | ||||
procstat_getumask_sysctl(pid_t pid, unsigned short *maskp) | procstat_getumask_sysctl(pid_t pid, unsigned short *maskp) | ||||
{ | { | ||||
int error; | int error; | ||||
int mib[4]; | int mib[4]; | ||||
▲ Show 20 Lines • Show All 532 Lines • Show Last 20 Lines |