summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>2022-02-22 17:22:30 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>2022-02-22 17:22:30 +0000
commit41b73aeefc1e5e3759c9de149288b489d467f431 (patch)
tree37eb0178fa55c24153f9c84c0dd661e9088f3146
parent1416b84930b999dd5250039614b9af8ed164b47a (diff)
Since other exported commandnames were increased to 24 and graduated into
proper strings, adapt struct acct's ac_comm similarily. While here increase ac_mem to 32-bits, increase ac_flag from 8 to 32 bits for future extensions, add ac_pid for forensics, and reorder the structure to avoid compiler pads. More work remains in the sa(8) command to use ac_pid better. This is a flag day for the acct file format, new/old files/tools are incompatible. ok bluhm millert
-rw-r--r--share/man/man5/acct.513
-rw-r--r--sys/kern/kern_acct.c5
-rw-r--r--sys/sys/acct.h41
-rw-r--r--usr.sbin/sa/extern.h9
-rw-r--r--usr.sbin/sa/main.c7
5 files changed, 42 insertions, 33 deletions
diff --git a/share/man/man5/acct.5 b/share/man/man5/acct.5
index a2d17bec782..378676ed9c7 100644
--- a/share/man/man5/acct.5
+++ b/share/man/man5/acct.5
@@ -1,4 +1,4 @@
-.\" $OpenBSD: acct.5,v 1.25 2021/12/13 16:37:37 deraadt Exp $
+.\" $OpenBSD: acct.5,v 1.26 2022/02/22 17:22:29 deraadt Exp $
.\" $NetBSD: acct.5,v 1.4 1995/10/22 01:40:10 ghudson Exp $
.\"
.\" Copyright (c) 1991, 1993
@@ -30,7 +30,7 @@
.\"
.\" @(#)acct.5 8.1 (Berkeley) 6/5/93
.\"
-.Dd $Mdocdate: December 13 2021 $
+.Dd $Mdocdate: February 22 2022 $
.Dt ACCT 5
.Os
.Sh NAME
@@ -57,16 +57,17 @@ to the accounting file.
typedef u_int16_t comp_t;
struct acct {
- char ac_comm[10]; /* command name */
+ char ac_comm[24]; /* command name, incl NUL */
comp_t ac_utime; /* user time */
comp_t ac_stime; /* system time */
comp_t ac_etime; /* elapsed time */
+ comp_t ac_io; /* count of IO blocks */
time_t ac_btime; /* starting time */
uid_t ac_uid; /* user id */
gid_t ac_gid; /* group id */
- u_int16_t ac_mem; /* average memory usage */
- comp_t ac_io; /* count of IO blocks */
+ u_int32_t ac_mem; /* average memory usage */
dev_t ac_tty; /* controlling tty, or -1 */
+ pid_t ac_pid; /* process id */
#define AFORK 0x01 /* fork'd but not exec'd */
#define AMAP 0x04 /* system call or stack mapping violation */
@@ -75,7 +76,7 @@ struct acct {
#define APLEDGE 0x20 /* killed due to pledge violation */
#define ATRAP 0x40 /* memory access violation */
#define AUNVEIL 0x80 /* unveil access violation */
- u_int8_t ac_flag; /* accounting flags */
+ u_int32_t ac_flag; /* accounting flags */
};
/*
diff --git a/sys/kern/kern_acct.c b/sys/kern/kern_acct.c
index e8499529eeb..4ffb88f2e93 100644
--- a/sys/kern/kern_acct.c
+++ b/sys/kern/kern_acct.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_acct.c,v 1.45 2021/12/13 16:37:37 deraadt Exp $ */
+/* $OpenBSD: kern_acct.c,v 1.46 2022/02/22 17:22:29 deraadt Exp $ */
/* $NetBSD: kern_acct.c,v 1.42 1996/02/04 02:15:12 christos Exp $ */
/*-
@@ -235,6 +235,9 @@ acct_process(struct proc *p)
/* (8) The boolean flags that tell how process terminated or misbehaved. */
acct.ac_flag = pr->ps_acflag;
+ /* Extensions */
+ acct.ac_pid = pr->ps_pid;
+
/*
* Now, just write the accounting information to the file.
*/
diff --git a/sys/sys/acct.h b/sys/sys/acct.h
index e802b258a84..dce3283b12c 100644
--- a/sys/sys/acct.h
+++ b/sys/sys/acct.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: acct.h,v 1.11 2021/12/13 16:37:37 deraadt Exp $ */
+/* $OpenBSD: acct.h,v 1.12 2022/02/22 17:22:28 deraadt Exp $ */
/* $NetBSD: acct.h,v 1.16 1995/03/26 20:23:52 jtc Exp $ */
/*-
@@ -37,6 +37,8 @@
* @(#)acct.h 8.3 (Berkeley) 7/10/94
*/
+#include <sys/syslimits.h>
+
/*
* Accounting structures; these use a comp_t type which is a 3 bits base 8
* exponent, 13 bit fraction ``floating point'' number. Units are 1/AHZ
@@ -45,25 +47,26 @@
typedef u_int16_t comp_t;
struct acct {
- char ac_comm[10]; /* command name */
- comp_t ac_utime; /* user time */
- comp_t ac_stime; /* system time */
- comp_t ac_etime; /* elapsed time */
- time_t ac_btime; /* starting time */
- uid_t ac_uid; /* user id */
- gid_t ac_gid; /* group id */
- u_int16_t ac_mem; /* average memory usage */
- comp_t ac_io; /* count of IO blocks */
- dev_t ac_tty; /* controlling tty, or -1 */
+ char ac_comm[_MAXCOMLEN]; /* command name, incl NUL */
+ comp_t ac_utime; /* user time */
+ comp_t ac_stime; /* system time */
+ comp_t ac_etime; /* elapsed time */
+ comp_t ac_io; /* count of IO blocks */
+ time_t ac_btime; /* starting time */
+ uid_t ac_uid; /* user id */
+ gid_t ac_gid; /* group id */
+ u_int32_t ac_mem; /* average memory usage */
+ dev_t ac_tty; /* controlling tty, or -1 */
+ pid_t ac_pid; /* process id */
-#define AFORK 0x01 /* fork'd but not exec'd */
-#define AMAP 0x04 /* system call or stack mapping violation */
-#define ACORE 0x08 /* dumped core */
-#define AXSIG 0x10 /* killed by a signal */
-#define APLEDGE 0x20 /* killed due to pledge violation */
-#define ATRAP 0x40 /* memory access violation */
-#define AUNVEIL 0x80 /* unveil access violation */
- u_int8_t ac_flag; /* accounting flags */
+#define AFORK 0x01 /* fork'd but not exec'd */
+#define AMAP 0x04 /* system call or stack mapping violation */
+#define ACORE 0x08 /* dumped core */
+#define AXSIG 0x10 /* killed by a signal */
+#define APLEDGE 0x20 /* killed due to pledge violation */
+#define ATRAP 0x40 /* memory access violation */
+#define AUNVEIL 0x80 /* unveil access violation */
+ u_int32_t ac_flag; /* accounting flags */
};
/*
diff --git a/usr.sbin/sa/extern.h b/usr.sbin/sa/extern.h
index e7d22341adf..4ab2142daa9 100644
--- a/usr.sbin/sa/extern.h
+++ b/usr.sbin/sa/extern.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: extern.h,v 1.6 2019/01/17 06:21:46 tedu Exp $ */
+/* $OpenBSD: extern.h,v 1.7 2022/02/22 17:22:29 deraadt Exp $ */
/*
* Copyright (c) 1994 Christopher G. Demetriou
* All rights reserved.
@@ -30,21 +30,22 @@
*
*/
-#include <sys/param.h> /* MAXCOMLEN */
+#include <sys/sysctl.h>
#include <db.h>
/* structures */
struct cmdinfo {
- char ci_comm[MAXCOMLEN+2]; /* command name (+ '*') */
+ char ci_comm[KI_MAXCOMLEN+1]; /* command name (+ '*') */
uid_t ci_uid; /* user id */
+ pid_t ci_pid; /* pid */
uint64_t ci_calls; /* number of calls */
uint64_t ci_etime; /* elapsed time */
uint64_t ci_utime; /* user time */
uint64_t ci_stime; /* system time */
uint64_t ci_mem; /* memory use */
uint64_t ci_io; /* number of disk i/o ops */
- u_int ci_flags; /* flags; see below */
+ uint32_t ci_flags; /* flags; see below */
};
#define CI_UNPRINTABLE 0x0001 /* unprintable chars in name */
diff --git a/usr.sbin/sa/main.c b/usr.sbin/sa/main.c
index ac83714c3d0..fa7cb2fde79 100644
--- a/usr.sbin/sa/main.c
+++ b/usr.sbin/sa/main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: main.c,v 1.17 2021/10/24 21:24:19 deraadt Exp $ */
+/* $OpenBSD: main.c,v 1.18 2022/02/22 17:22:29 deraadt Exp $ */
/*
* Copyright (c) 1994 Christopher G. Demetriou
* All rights reserved.
@@ -339,6 +339,7 @@ acct_load(char *pn, int wr)
ci.ci_uid = ac.ac_uid;
ci.ci_mem = ac.ac_mem;
ci.ci_io = decode_comp_t(ac.ac_io) / AHZ;
+ ci.ci_pid = ac.ac_pid;
if (!uflag) {
/* and enter it into the usracct and pacct databases */
@@ -347,10 +348,10 @@ acct_load(char *pn, int wr)
if (sflag || (mflag && !qflag))
usracct_add(&ci);
} else if (!qflag)
- printf("%6u %12.2f cpu %12lluk mem %12llu io %s\n",
+ printf("%6u %12.2f cpu %12lluk mem %12llu io pid %u %s\n",
ci.ci_uid,
(ci.ci_utime + ci.ci_stime) / (double) AHZ,
- ci.ci_mem, ci.ci_io, ci.ci_comm);
+ ci.ci_mem, ci.ci_io, ci.ci_pid, ci.ci_comm);
}
/* finally, return the file descriptor for possible truncation */