diff options
author | peter <peter@FreeBSD.org> | 2001-08-16 08:41:15 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2001-08-16 08:41:15 +0000 |
commit | fbb375df47d4a20861f5b7a7836d97f2ddb68722 (patch) | |
tree | ecabdb6b8812a693beda939b5c8687082bfb01ae /sys/kern/kern_proc.c | |
parent | 5ec991a49c2aac0dad59ed8ac6f888697c32a891 (diff) | |
download | FreeBSD-src-fbb375df47d4a20861f5b7a7836d97f2ddb68722.zip FreeBSD-src-fbb375df47d4a20861f5b7a7836d97f2ddb68722.tar.gz |
Use the backwards compatability mechanisms so that ps/top etc dont have
unnecessary breakage.
While here, use explicit sizes for the string fields so that we dont
have unintentional changes again in the future when key tunables change.
This still is not quite right, but a june userland is happy with
a -current kernel with these tweaks.
Diffstat (limited to 'sys/kern/kern_proc.c')
-rw-r--r-- | sys/kern/kern_proc.c | 24 |
1 files changed, 15 insertions, 9 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; |