diff options
-rw-r--r-- | sys/kern/kern_proc.c | 24 | ||||
-rw-r--r-- | sys/sys/user.h | 13 |
2 files changed, 24 insertions, 13 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 50f3446..113b806 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -430,7 +430,7 @@ fill_kinfo_proc(p, kp) kp->ki_svuid = p->p_ucred->cr_svuid; kp->ki_ngroups = p->p_ucred->cr_ngroups; bcopy(p->p_ucred->cr_groups, kp->ki_groups, - NGROUPS * sizeof(gid_t)); + KI_NGROUPS * sizeof(gid_t)); kp->ki_rgid = p->p_ucred->cr_rgid; kp->ki_svgid = p->p_ucred->cr_svgid; } @@ -458,13 +458,14 @@ fill_kinfo_proc(p, kp) p->p_stats->p_cru.ru_stime.tv_usec; } if (p->p_wmesg) { - strncpy(kp->ki_wmesg, p->p_wmesg, WMESGLEN); - kp->ki_wmesg[WMESGLEN] = 0; + strncpy(kp->ki_wmesg, p->p_wmesg, sizeof(kp->ki_wmesg) - 1); + kp->ki_wmesg[sizeof(kp->ki_wmesg) - 1] = '\0'; } if (p->p_stat == SMTX) { kp->ki_kiflag |= KI_MTXBLOCK; - strncpy(kp->ki_mtxname, p->p_mtxname, MTXNAMELEN); - kp->ki_mtxname[MTXNAMELEN] = 0; + strncpy(kp->ki_mtxname, p->p_mtxname, + sizeof(kp->ki_mtxname) - 1); + kp->ki_mtxname[sizeof(kp->ki_mtxname) - 1] = '\0'; } kp->ki_stat = p->p_stat; kp->ki_sflag = p->p_sflag; @@ -490,7 +491,10 @@ fill_kinfo_proc(p, kp) if (sp != NULL) { kp->ki_sid = sp->s_sid; - bcopy(sp->s_login, kp->ki_login, sizeof(kp->ki_login)); + strncpy(kp->ki_login, sp->s_login, + sizeof(kp->ki_login) - 1); + kp->ki_login[sizeof(kp->ki_login) - 1] = '\0'; + if (sp->s_ttyvp) kp->ki_kiflag = KI_CTTY; if (SESS_LEADER(p)) @@ -504,9 +508,11 @@ fill_kinfo_proc(p, kp) kp->ki_tsid = tp->t_session->s_sid; } else kp->ki_tdev = NOUDEV; - if (p->p_comm[0] != 0) { - strncpy(kp->ki_comm, p->p_comm, MAXCOMLEN); - kp->ki_comm[MAXCOMLEN] = 0; + if (p->p_comm[0] != '\0') { + strncpy(kp->ki_comm, p->p_comm, sizeof(kp->ki_comm) - 1); + kp->ki_comm[sizeof(kp->ki_comm) - 1] = '\0'; + strncpy(kp->ki_ocomm, p->p_comm, sizeof(kp->ki_ocomm) - 1); + kp->ki_ocomm[sizeof(kp->ki_ocomm) - 1] = '\0'; } kp->ki_siglist = p->p_siglist; kp->ki_sigmask = p->p_sigmask; diff --git a/sys/sys/user.h b/sys/sys/user.h index 3dbadf8..789b325 100644 --- a/sys/sys/user.h +++ b/sys/sys/user.h @@ -93,6 +93,10 @@ #endif #define WMESGLEN 8 /* size of returned wchan message */ #define MTXNAMELEN 8 /* size of returned mutex name */ +#define OCOMMLEN 16 /* size of returned ki_ocomm name */ +#define COMMLEN 19 /* size of returned ki_comm name */ +#define KI_NGROUPS 16 /* number of groups in ki_groups */ +#define LOGNAMELEN 17 /* size of returned ki_login */ struct kinfo_proc { int ki_structsize; /* size of this structure */ @@ -123,7 +127,7 @@ struct kinfo_proc { gid_t ki_rgid; /* Real group id */ gid_t ki_svgid; /* Saved effective group id */ short ki_ngroups; /* number of groups */ - gid_t ki_groups[NGROUPS]; /* groups */ + gid_t ki_groups[KI_NGROUPS]; /* groups */ vm_size_t ki_size; /* virtual size */ segsz_t ki_rssize; /* current resident set size in pages */ segsz_t ki_swrss; /* resident set size before last swap */ @@ -148,11 +152,12 @@ struct kinfo_proc { char ki_rqindex; /* Run queue index */ u_char ki_oncpu; /* Which cpu we are on */ u_char ki_lastcpu; /* Last cpu we were on */ - char ki_comm[MAXCOMLEN+1]; /* command name */ + char ki_ocomm[OCOMMLEN+1]; /* command name */ char ki_wmesg[WMESGLEN+1]; /* wchan message */ - char ki_login[MAXLOGNAME+1]; /* setlogin name */ + char ki_login[LOGNAMELEN+1]; /* setlogin name */ char ki_mtxname[MTXNAMELEN+1]; /* mutex name */ - char ki_sparestrings[99]; /* spare string space */ + char ki_comm[COMMLEN+1]; /* command name */ + char ki_sparestrings[85]; /* spare string space */ struct rusage ki_rusage; /* process rusage statistics */ long ki_sflag; /* PS_* flags */ struct priority ki_pri; /* process priority */ |