[PATCH v2 1/5] Load /proc/$pid/comm into tcb
Masatake YAMATO
yamato at redhat.com
Tue Aug 24 19:26:39 UTC 2021
From: <yamato at redhat.com>
From: Masatake YAMATO <yamato at redhat.com>
In preparation for the forthcoming -Y,--decode-pids option.
Load the content of /proc/$pid/comm to `comm', a newly introduced
member of tcb.
The loading is done when
A. a tcb is initialized,
B. execve or execveat is called, and
C. prctl(PR_SET_NAME,...) is called.
Limitation: this change is not enough for handling the case that
someone writes a value to /proc/$pid/comm directly.
(e.g. running echo "foo" > /proc/$pid/comm)
* src/defs.h (struct tcb): New member `comm'.
(PROC_COMM_LEN): New definition.
(decode_pids_enabled): New variable declaration.
(maybe_load_task_comm): New function declaration.
* src/strace.c (decode_pids_enabled): New variable definition. The
loading is done only when this variable is non-zero. In the forthcoming
change, -Y,--decode-pids option controls the value.
(load_task_comm): New function loading the content of
/proc/$pid/comm to `comm' member of tcb.
(maybe_load_pid_comm): New helper function for load_task_comm().
(alloctcb): Call load_task_comm() for initializing the `comm' member.
* src/syscall.c: include <linux/prctl.h> for referring PR_SET_NAME.
(syscall_exiting_decode): Call maybe_load_task_comm().
* src/sysent.h (COMM_CHANGE): New definition.
* src/sysent_shorthand_defs.h (CC): New definition.
* src/sysent_shorthand_undefs.h (CC): Add undef.
* src/linux/32/syscallent.h: Add CC flag to syscalls chaning
/proc/$pid/comm.
* linux/64/syscallent.h: Likewise.
* linux/alpha/syscallent.h: Likewise.
* linux/arm/syscallent.h: Likewise.
* linux/avr32/syscallent.h: Likewise.
* linux/bfin/syscallent.h: Likewise.
* linux/hppa/syscallent.h: Likewise.
* linux/i386/syscallent.h: Likewise.
* linux/ia64/syscallent.h: Likewise.
* linux/m68k/syscallent.h: Likewise.
* linux/microblaze/syscallent.h: Likewise.
* linux/mips/syscallent-n32.h: Likewise.
* linux/mips/syscallent-n64.h: Likewise.
* linux/mips/syscallent-o32.h: Likewise.
* linux/powerpc/syscallent.h: Likewise.
* linux/powerpc64/syscallent.h: Likewise.
* linux/s390/syscallent.h: Likewise.
* linux/s390x/syscallent.h: Likewise.
* linux/sh/syscallent.h: Likewise.
* linux/sh64/syscallent.h: Likewise.
* linux/sparc/syscallent.h: Likewise.
* linux/sparc64/syscallent.h: Likewise.
* linux/x32/syscallent.h: Likewise.
* linux/x86_64/syscallent.h: Likewise.
* linux/xtensa/syscallent.h: Likewise.
* src/filter_seccomp.c (traced_by_seccomp): Force tracing syscalls
marked with `COMM_CHANGE' if `decode_pids_enabled' is set.
Signed-off-by: Masatake YAMATO <yamato at redhat.com>
---
src/defs.h | 5 ++++
src/filter_seccomp.c | 3 ++-
src/linux/32/syscallent.h | 6 ++---
src/linux/64/syscallent.h | 6 ++---
src/linux/alpha/syscallent.h | 6 ++---
src/linux/arm/syscallent.h | 6 ++---
src/linux/avr32/syscallent.h | 6 ++---
src/linux/bfin/syscallent.h | 6 ++---
src/linux/hppa/syscallent.h | 6 ++---
src/linux/i386/syscallent.h | 6 ++---
src/linux/ia64/syscallent.h | 6 ++---
src/linux/m68k/syscallent.h | 6 ++---
src/linux/microblaze/syscallent.h | 6 ++---
src/linux/mips/syscallent-n32.h | 6 ++---
src/linux/mips/syscallent-n64.h | 6 ++---
src/linux/mips/syscallent-o32.h | 6 ++---
src/linux/powerpc/syscallent.h | 6 ++---
src/linux/powerpc64/syscallent.h | 6 ++---
src/linux/s390/syscallent.h | 6 ++---
src/linux/s390x/syscallent.h | 6 ++---
src/linux/sh/syscallent.h | 6 ++---
src/linux/sh64/syscallent.h | 6 ++---
src/linux/sparc/syscallent.h | 6 ++---
src/linux/sparc64/syscallent.h | 6 ++---
src/linux/x32/syscallent.h | 6 ++---
src/linux/x86_64/syscallent.h | 6 ++---
src/linux/xtensa/syscallent.h | 6 ++---
src/strace.c | 39 +++++++++++++++++++++++++++++++
src/syscall.c | 8 +++++++
src/sysent.h | 1 +
src/sysent_shorthand_defs.h | 2 ++
src/sysent_shorthand_undefs.h | 1 +
32 files changed, 133 insertions(+), 76 deletions(-)
diff --git a/src/defs.h b/src/defs.h
index b2dcd0350..fa2b98624 100644
--- a/src/defs.h
+++ b/src/defs.h
@@ -322,6 +322,9 @@ struct tcb {
void *unwind_ctx;
struct unwind_queue_t *unwind_queue;
# endif
+
+# define PROC_COMM_LEN 16
+ char comm[PROC_COMM_LEN];
};
/* TCB flags */
@@ -532,6 +535,7 @@ extern bool stack_trace_enabled;
extern unsigned ptrace_setoptions;
extern unsigned max_strlen;
extern unsigned os_release;
+extern unsigned decode_pids_enabled;
# undef KERNEL_VERSION
# define KERNEL_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
@@ -1903,4 +1907,5 @@ print_big_u64_addr(const uint64_t addr)
# include "syscall.h"
# endif
+void maybe_load_task_comm(struct tcb *tcp);
#endif /* !STRACE_DEFS_H */
diff --git a/src/filter_seccomp.c b/src/filter_seccomp.c
index 6c9056c33..b49f979f5 100644
--- a/src/filter_seccomp.c
+++ b/src/filter_seccomp.c
@@ -283,7 +283,8 @@ traced_by_seccomp(unsigned int scno, unsigned int p)
{
unsigned int always_trace_flags =
TRACE_INDIRECT_SUBCALL | TRACE_SECCOMP_DEFAULT |
- (stack_trace_enabled ? MEMORY_MAPPING_CHANGE : 0);
+ (stack_trace_enabled ? MEMORY_MAPPING_CHANGE : 0) |
+ (decode_pids_enabled ? COMM_CHANGE : 0);
return sysent_vec[p][scno].sys_flags & always_trace_flags ||
is_number_in_set_array(scno, trace_set, p);
}
diff --git a/src/linux/32/syscallent.h b/src/linux/32/syscallent.h
index 032d365d1..44bb908e1 100644
--- a/src/linux/32/syscallent.h
+++ b/src/linux/32/syscallent.h
@@ -179,7 +179,7 @@
[164] = { 2, 0, SEN(setrlimit), "setrlimit" },
[165] = { 2, 0, SEN(getrusage), "getrusage" },
[166] = { 1, NF, SEN(umask), "umask" },
-[167] = { 5, TC, SEN(prctl), "prctl" },
+[167] = { 5, CC|TC, SEN(prctl), "prctl" },
[168] = { 3, 0, SEN(getcpu), "getcpu" },
/* [169] gettimeofday */
/* [170] settimeofday */
@@ -233,7 +233,7 @@
[218] = { 4, 0, SEN(request_key), "request_key" },
[219] = { 5, 0, SEN(keyctl), "keyctl" },
[220] = { 5, TP, SEN(clone), "clone" },
-[221] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[221] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[222] = { 6, TD|TM|SI, SEN(ARCH_mmap), "mmap2" },
[223] = { 6, TD, SEN(fadvise64_64), "fadvise64_64" },
[224] = { 2, TF, SEN(swapon), "swapon" },
@@ -278,7 +278,7 @@
[278] = { 3, 0, SEN(getrandom), "getrandom" },
[279] = { 2, TD, SEN(memfd_create), "memfd_create" },
[280] = { 3, TD, SEN(bpf), "bpf" },
-[281] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[281] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[282] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[283] = { 3, 0, SEN(membarrier), "membarrier" },
[284] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/64/syscallent.h b/src/linux/64/syscallent.h
index 7ddc83a9a..1463d1974 100644
--- a/src/linux/64/syscallent.h
+++ b/src/linux/64/syscallent.h
@@ -172,7 +172,7 @@
[164] = { 2, 0, SEN(setrlimit), "setrlimit" },
[165] = { 2, 0, SEN(getrusage), "getrusage" },
[166] = { 1, NF, SEN(umask), "umask" },
-[167] = { 5, TC, SEN(prctl), "prctl" },
+[167] = { 5, CC|TC, SEN(prctl), "prctl" },
[168] = { 3, 0, SEN(getcpu), "getcpu" },
[169] = { 2, TCL, SEN(gettimeofday), "gettimeofday" },
[170] = { 2, TCL, SEN(settimeofday), "settimeofday" },
@@ -226,7 +226,7 @@
[218] = { 4, 0, SEN(request_key), "request_key" },
[219] = { 5, 0, SEN(keyctl), "keyctl" },
[220] = { 5, TP, SEN(clone), "clone" },
-[221] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[221] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[222] = { 6, TD|TM|SI, SEN(mmap), "mmap" },
[223] = { 4, TD, SEN(fadvise64), "fadvise64" },
[224] = { 2, TF, SEN(swapon), "swapon" },
@@ -271,7 +271,7 @@
[278] = { 3, 0, SEN(getrandom), "getrandom" },
[279] = { 2, TD, SEN(memfd_create), "memfd_create" },
[280] = { 3, TD, SEN(bpf), "bpf" },
-[281] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[281] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[282] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[283] = { 3, 0, SEN(membarrier), "membarrier" },
[284] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/alpha/syscallent.h b/src/linux/alpha/syscallent.h
index f9e971ed3..87cbe59bd 100644
--- a/src/linux/alpha/syscallent.h
+++ b/src/linux/alpha/syscallent.h
@@ -66,7 +66,7 @@
[ 56] = { 5, 0, SEN(printargs), "osf_revoke" }, /* not implemented */
[ 57] = { 2, TF, SEN(symlink), "symlink" },
[ 58] = { 3, TF, SEN(readlink), "readlink" },
-[ 59] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 59] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
[ 62] = { 5, TD|TFST|TSTA, SEN(printargs), "osf_old_fstat" }, /* not implemented */
@@ -292,7 +292,7 @@
[345] = { 5, 0, SEN(printargs), "pciconfig_read" },
[346] = { 5, 0, SEN(printargs), "pciconfig_write" },
[347] = { 5, 0, SEN(query_module), "query_module" }, /* not implemented */
-[348] = { 5, TC, SEN(prctl), "prctl" },
+[348] = { 5, CC|TC, SEN(prctl), "prctl" },
[349] = { 4, TD, SEN(pread), "pread64" },
[350] = { 4, TD, SEN(pwrite), "pwrite64" },
[351] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
@@ -456,7 +456,7 @@
[510] = { 5, TD|TF, SEN(renameat2), "renameat2" },
[511] = { 3, 0, SEN(getrandom), "getrandom" },
[512] = { 2, TD, SEN(memfd_create), "memfd_create" },
-[513] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[513] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[514] = { 3, 0, SEN(seccomp), "seccomp" },
[515] = { 3, TD, SEN(bpf), "bpf" },
[516] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
diff --git a/src/linux/arm/syscallent.h b/src/linux/arm/syscallent.h
index 4fd351305..2086308a2 100644
--- a/src/linux/arm/syscallent.h
+++ b/src/linux/arm/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -179,7 +179,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -394,7 +394,7 @@
[384] = { 3, 0, SEN(getrandom), "getrandom" },
[385] = { 2, TD, SEN(memfd_create), "memfd_create" },
[386] = { 3, TD, SEN(bpf), "bpf" },
-[387] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[387] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[388] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[389] = { 3, 0, SEN(membarrier), "membarrier" },
[390] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/avr32/syscallent.h b/src/linux/avr32/syscallent.h
index 5d4624abe..104044e5f 100644
--- a/src/linux/avr32/syscallent.h
+++ b/src/linux/avr32/syscallent.h
@@ -17,7 +17,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -154,7 +154,7 @@
[145] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[146] = { 3, TC, SEN(setresgid), "setresgid" },
[147] = { 3, TC, SEN(getresgid), "getresgid" },
-[148] = { 5, TC, SEN(prctl), "prctl" },
+[148] = { 5, CC|TC, SEN(prctl), "prctl" },
[149] = { 3, TN, SEN(socket), "socket" },
[150] = { 3, TN, SEN(bind), "bind" },
[151] = { 3, TN, SEN(connect), "connect" },
@@ -326,7 +326,7 @@
[317] = { 3, 0, SEN(getrandom), "getrandom" },
[318] = { 2, TD, SEN(memfd_create), "memfd_create" },
[319] = { 3, TD, SEN(bpf), "bpf" },
-[320] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[320] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[321] = { 4, TN, SEN(accept4), "accept4" },
[322] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[323] = { 3, 0, SEN(membarrier), "membarrier" },
diff --git a/src/linux/bfin/syscallent.h b/src/linux/bfin/syscallent.h
index 16287d085..05720b4f9 100644
--- a/src/linux/bfin/syscallent.h
+++ b/src/linux/bfin/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -179,7 +179,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -398,4 +398,4 @@
[389] = { 3, 0, SEN(getrandom), "getrandom" },
[390] = { 2, TD, SEN(memfd_create), "memfd_create" },
[391] = { 3, TD, SEN(bpf), "bpf" },
-[392] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[392] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
diff --git a/src/linux/hppa/syscallent.h b/src/linux/hppa/syscallent.h
index 10bda1d8c..a7dd57ce9 100644
--- a/src/linux/hppa/syscallent.h
+++ b/src/linux/hppa/syscallent.h
@@ -14,7 +14,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -175,7 +175,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid), "setresgid" },
[171] = { 3, TC, SEN(getresgid), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -345,7 +345,7 @@
[339] = { 3, 0, SEN(getrandom), "getrandom" },
[340] = { 2, TD, SEN(memfd_create), "memfd_create" },
[341] = { 3, TD, SEN(bpf), "bpf" },
-[342] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[342] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[343] = { 3, 0, SEN(membarrier), "membarrier" },
[344] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[345] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/i386/syscallent.h b/src/linux/i386/syscallent.h
index 3c4cb9fe4..3553a0575 100644
--- a/src/linux/i386/syscallent.h
+++ b/src/linux/i386/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -179,7 +179,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -364,7 +364,7 @@
[355] = { 3, 0, SEN(getrandom), "getrandom" },
[356] = { 2, TD, SEN(memfd_create), "memfd_create" },
[357] = { 3, TD, SEN(bpf), "bpf" },
-[358] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[358] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[359] = { 3, TN, SEN(socket), "socket" },
[360] = { 4, TN, SEN(socketpair), "socketpair" },
[361] = { 3, TN, SEN(bind), "bind" },
diff --git a/src/linux/ia64/syscallent.h b/src/linux/ia64/syscallent.h
index b002c8341..912e9a2a9 100644
--- a/src/linux/ia64/syscallent.h
+++ b/src/linux/ia64/syscallent.h
@@ -29,7 +29,7 @@
[BASE_NR + 6] = { 2, TD|TF, SEN(creat), "creat" },
[BASE_NR + 7] = { 2, TF, SEN(link), "link" },
[BASE_NR + 8] = { 1, TF, SEN(unlink), "unlink" },
-[BASE_NR + 9] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[BASE_NR + 9] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[BASE_NR + 10] = { 1, TF, SEN(chdir), "chdir" },
[BASE_NR + 11] = { 1, TD, SEN(fchdir), "fchdir" },
[BASE_NR + 12] = { 2, TF, SEN(utimes), "utimes" },
@@ -166,7 +166,7 @@
[BASE_NR + 143] = { 2, 0, SEN(sched_rr_get_interval_time64),"sched_rr_get_interval"},
[BASE_NR + 144] = { 2, 0, SEN(nanosleep_time64), "nanosleep" },
[BASE_NR + 145] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
-[BASE_NR + 146] = { 5, TC, SEN(prctl), "prctl" },
+[BASE_NR + 146] = { 5, CC|TC, SEN(prctl), "prctl" },
[BASE_NR + 147] = { 0, PU|NF, SEN(getpagesize), "old_getpagesize" },
[BASE_NR + 148] = { 6, TD|TM|SI, SEN(mmap_pgoff), "mmap2" },
[BASE_NR + 149] = { 5, 0, SEN(printargs), "pciconfig_read" },
@@ -338,7 +338,7 @@
[BASE_NR + 315] = { 3, 0, SEN(getrandom), "getrandom" },
[BASE_NR + 316] = { 2, TD, SEN(memfd_create), "memfd_create" },
[BASE_NR + 317] = { 3, TD, SEN(bpf), "bpf" },
-[BASE_NR + 318] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[BASE_NR + 318] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[BASE_NR + 319] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[BASE_NR + 320] = { 3, 0, SEN(membarrier), "membarrier" },
[BASE_NR + 321] = { 5, 0, SEN(kcmp), "kcmp" },
diff --git a/src/linux/m68k/syscallent.h b/src/linux/m68k/syscallent.h
index 67f66d719..3abd77b0c 100644
--- a/src/linux/m68k/syscallent.h
+++ b/src/linux/m68k/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -179,7 +179,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -361,7 +361,7 @@
[352] = { 3, 0, SEN(getrandom), "getrandom" },
[353] = { 2, TD, SEN(memfd_create), "memfd_create" },
[354] = { 3, TD, SEN(bpf), "bpf" },
-[355] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[355] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[356] = { 3, TN, SEN(socket), "socket" },
[357] = { 4, TN, SEN(socketpair), "socketpair" },
[358] = { 3, TN, SEN(bind), "bind" },
diff --git a/src/linux/microblaze/syscallent.h b/src/linux/microblaze/syscallent.h
index d3446abdb..15ca048ca 100644
--- a/src/linux/microblaze/syscallent.h
+++ b/src/linux/microblaze/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -179,7 +179,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -394,7 +394,7 @@
[385] = { 3, 0, SEN(getrandom), "getrandom" },
[386] = { 2, TD, SEN(memfd_create), "memfd_create" },
[387] = { 3, TD, SEN(bpf), "bpf" },
-[388] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[388] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[389] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[390] = { 3, 0, SEN(membarrier), "membarrier" },
[391] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/mips/syscallent-n32.h b/src/linux/mips/syscallent-n32.h
index 58db21f81..a3e2f1de3 100644
--- a/src/linux/mips/syscallent-n32.h
+++ b/src/linux/mips/syscallent-n32.h
@@ -65,7 +65,7 @@
[BASE_NR + 54] = { 5, TN, SEN(getsockopt), "getsockopt" },
[BASE_NR + 55] = { 5, TP, SEN(clone), "clone" },
[BASE_NR + 56] = { 0, TP, SEN(fork), "fork" },
-[BASE_NR + 57] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[BASE_NR + 57] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[BASE_NR + 58] = { 1, TP|SE, SEN(exit), "exit" },
[BASE_NR + 59] = { 4, TP, SEN(wait4), "wait4" },
[BASE_NR + 60] = { 2, TS|TP, SEN(kill), "kill" },
@@ -161,7 +161,7 @@
[BASE_NR + 150] = { 0, 0, SEN(vhangup), "vhangup" },
[BASE_NR + 151] = { 2, TF, SEN(pivotroot), "pivot_root" },
[BASE_NR + 152] = { 1, 0, SEN(sysctl), "_sysctl" },
-[BASE_NR + 153] = { 5, TC, SEN(prctl), "prctl" },
+[BASE_NR + 153] = { 5, CC|TC, SEN(prctl), "prctl" },
[BASE_NR + 154] = { 1, TCL, SEN(adjtimex32), "adjtimex" },
[BASE_NR + 155] = { 2, 0, SEN(setrlimit), "setrlimit" },
[BASE_NR + 156] = { 1, TF, SEN(chroot), "chroot" },
@@ -328,7 +328,7 @@
[BASE_NR + 317] = { 3, 0, SEN(getrandom), "getrandom" },
[BASE_NR + 318] = { 2, TD, SEN(memfd_create), "memfd_create" },
[BASE_NR + 319] = { 3, TD, SEN(bpf), "bpf" },
-[BASE_NR + 320] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[BASE_NR + 320] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[BASE_NR + 321] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[BASE_NR + 322] = { 3, 0, SEN(membarrier), "membarrier" },
[BASE_NR + 323] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/mips/syscallent-n64.h b/src/linux/mips/syscallent-n64.h
index dc45447e7..0eb9a4d57 100644
--- a/src/linux/mips/syscallent-n64.h
+++ b/src/linux/mips/syscallent-n64.h
@@ -65,7 +65,7 @@
[BASE_NR + 54] = { 5, TN, SEN(getsockopt), "getsockopt" },
[BASE_NR + 55] = { 5, TP, SEN(clone), "clone" },
[BASE_NR + 56] = { 0, TP, SEN(fork), "fork" },
-[BASE_NR + 57] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[BASE_NR + 57] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[BASE_NR + 58] = { 1, TP|SE, SEN(exit), "exit" },
[BASE_NR + 59] = { 4, TP, SEN(wait4), "wait4" },
[BASE_NR + 60] = { 2, TS|TP, SEN(kill), "kill" },
@@ -161,7 +161,7 @@
[BASE_NR + 150] = { 0, 0, SEN(vhangup), "vhangup" },
[BASE_NR + 151] = { 2, TF, SEN(pivotroot), "pivot_root" },
[BASE_NR + 152] = { 1, 0, SEN(sysctl), "_sysctl" },
-[BASE_NR + 153] = { 5, TC, SEN(prctl), "prctl" },
+[BASE_NR + 153] = { 5, CC|TC, SEN(prctl), "prctl" },
[BASE_NR + 154] = { 1, TCL, SEN(adjtimex64), "adjtimex" },
[BASE_NR + 155] = { 2, 0, SEN(setrlimit), "setrlimit" },
[BASE_NR + 156] = { 1, TF, SEN(chroot), "chroot" },
@@ -324,7 +324,7 @@
[BASE_NR + 313] = { 3, 0, SEN(getrandom), "getrandom" },
[BASE_NR + 314] = { 2, TD, SEN(memfd_create), "memfd_create" },
[BASE_NR + 315] = { 3, TD, SEN(bpf), "bpf" },
-[BASE_NR + 316] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[BASE_NR + 316] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[BASE_NR + 317] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[BASE_NR + 318] = { 3, 0, SEN(membarrier), "membarrier" },
[BASE_NR + 319] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/mips/syscallent-o32.h b/src/linux/mips/syscallent-o32.h
index a8e83178e..61eb35dfe 100644
--- a/src/linux/mips/syscallent-o32.h
+++ b/src/linux/mips/syscallent-o32.h
@@ -20,7 +20,7 @@
[BASE_NR + 8] = { 2, TD|TF, SEN(creat), "creat" },
[BASE_NR + 9] = { 2, TF, SEN(link), "link" },
[BASE_NR + 10] = { 1, TF, SEN(unlink), "unlink" },
-[BASE_NR + 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[BASE_NR + 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[BASE_NR + 12] = { 1, TF, SEN(chdir), "chdir" },
[BASE_NR + 13] = { 1, TCL, SEN(time), "time" },
[BASE_NR + 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -201,7 +201,7 @@
[BASE_NR + 189] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[BASE_NR + 190] = { 3, TC, SEN(setresgid), "setresgid" },
[BASE_NR + 191] = { 3, TC, SEN(getresgid), "getresgid" },
-[BASE_NR + 192] = { 5, TC, SEN(prctl), "prctl" },
+[BASE_NR + 192] = { 5, CC|TC, SEN(prctl), "prctl" },
[BASE_NR + 193] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[BASE_NR + 194] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[BASE_NR + 195] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -365,7 +365,7 @@
[BASE_NR + 353] = { 3, 0, SEN(getrandom), "getrandom" },
[BASE_NR + 354] = { 2, TD, SEN(memfd_create), "memfd_create" },
[BASE_NR + 355] = { 3, TD, SEN(bpf), "bpf" },
-[BASE_NR + 356] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[BASE_NR + 356] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[BASE_NR + 357] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[BASE_NR + 358] = { 3, 0, SEN(membarrier), "membarrier" },
[BASE_NR + 359] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/powerpc/syscallent.h b/src/linux/powerpc/syscallent.h
index 98b29e5e8..c8f954be4 100644
--- a/src/linux/powerpc/syscallent.h
+++ b/src/linux/powerpc/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -178,7 +178,7 @@
[168] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[169] = { 3, TC, SEN(setresgid), "setresgid" },
[170] = { 3, TC, SEN(getresgid), "getresgid" },
-[171] = { 5, TC, SEN(prctl), "prctl" },
+[171] = { 5, CC|TC, SEN(prctl), "prctl" },
[172] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[173] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[174] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -369,7 +369,7 @@
[359] = { 3, 0, SEN(getrandom), "getrandom" },
[360] = { 2, TD, SEN(memfd_create), "memfd_create" },
[361] = { 3, TD, SEN(bpf), "bpf" },
-[362] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[362] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[363] = { 0, 0, SEN(printargs), "switch_endian" },
[364] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[365] = { 3, 0, SEN(membarrier), "membarrier" },
diff --git a/src/linux/powerpc64/syscallent.h b/src/linux/powerpc64/syscallent.h
index a5035cb31..64f4c3ad5 100644
--- a/src/linux/powerpc64/syscallent.h
+++ b/src/linux/powerpc64/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -178,7 +178,7 @@
[168] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[169] = { 3, TC, SEN(setresgid), "setresgid" },
[170] = { 3, TC, SEN(getresgid), "getresgid" },
-[171] = { 5, TC, SEN(prctl), "prctl" },
+[171] = { 5, CC|TC, SEN(prctl), "prctl" },
[172] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[173] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[174] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -364,7 +364,7 @@
[359] = { 3, 0, SEN(getrandom), "getrandom" },
[360] = { 2, TD, SEN(memfd_create), "memfd_create" },
[361] = { 3, TD, SEN(bpf), "bpf" },
-[362] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[362] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[363] = { 0, 0, SEN(printargs), "switch_endian" },
[364] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[365] = { 3, 0, SEN(membarrier), "membarrier" },
diff --git a/src/linux/s390/syscallent.h b/src/linux/s390/syscallent.h
index 5b83b3d15..a808c7b5b 100644
--- a/src/linux/s390/syscallent.h
+++ b/src/linux/s390/syscallent.h
@@ -20,7 +20,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -181,7 +181,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -363,7 +363,7 @@
[351] = { 3, TD, SEN(bpf), "bpf" },
[352] = { 3, 0, SEN(s390_pci_mmio_write), "s390_pci_mmio_write" },
[353] = { 3, 0, SEN(s390_pci_mmio_read), "s390_pci_mmio_read" },
-[354] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[354] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[355] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[356] = { 3, 0, SEN(membarrier), "membarrier" },
[357] = { 5, TN, SEN(recvmmsg_time32), "recvmmsg" },
diff --git a/src/linux/s390x/syscallent.h b/src/linux/s390x/syscallent.h
index d64141075..90bf993b7 100644
--- a/src/linux/s390x/syscallent.h
+++ b/src/linux/s390x/syscallent.h
@@ -19,7 +19,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -170,7 +170,7 @@
[168] = { 3, TD, SEN(poll_time64), "poll" },
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170 ... 171] = { },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -347,7 +347,7 @@
[351] = { 3, TD, SEN(bpf), "bpf" },
[352] = { 3, 0, SEN(s390_pci_mmio_write), "s390_pci_mmio_write" },
[353] = { 3, 0, SEN(s390_pci_mmio_read), "s390_pci_mmio_read" },
-[354] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[354] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[355] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[356] = { 3, 0, SEN(membarrier), "membarrier" },
[357] = { 5, TN, SEN(recvmmsg_time64), "recvmmsg" },
diff --git a/src/linux/sh/syscallent.h b/src/linux/sh/syscallent.h
index 64f3d6f1f..c238f0400 100644
--- a/src/linux/sh/syscallent.h
+++ b/src/linux/sh/syscallent.h
@@ -20,7 +20,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -181,7 +181,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -382,7 +382,7 @@
[373] = { 3, 0, SEN(getrandom), "getrandom" },
[374] = { 2, TD, SEN(memfd_create), "memfd_create" },
[375] = { 3, TD, SEN(bpf), "bpf" },
-[376] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[376] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[377] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[378] = { 3, 0, SEN(membarrier), "membarrier" },
[379] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/sh64/syscallent.h b/src/linux/sh64/syscallent.h
index 94e6cea3a..f33504235 100644
--- a/src/linux/sh64/syscallent.h
+++ b/src/linux/sh64/syscallent.h
@@ -18,7 +18,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 11] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 1, TCL, SEN(time), "time" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -179,7 +179,7 @@
[169] = { 3, 0, SEN(nfsservctl), "nfsservctl" },
[170] = { 3, TC, SEN(setresgid16), "setresgid" },
[171] = { 3, TC, SEN(getresgid16), "getresgid" },
-[172] = { 5, TC, SEN(prctl), "prctl" },
+[172] = { 5, CC|TC, SEN(prctl), "prctl" },
[173] = { 0, TS, SEN(rt_sigreturn), "rt_sigreturn" },
[174] = { 4, TS, SEN(rt_sigaction), "rt_sigaction" },
[175] = { 4, TS, SEN(rt_sigprocmask), "rt_sigprocmask" },
@@ -391,7 +391,7 @@
[384] = { 3, 0, SEN(getrandom), "getrandom" },
[385] = { 2, TD, SEN(memfd_create), "memfd_create" },
[386] = { 3, TD, SEN(bpf), "bpf" },
-[387] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[387] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[388] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[389] = { 3, 0, SEN(membarrier), "membarrier" },
[390] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/sparc/syscallent.h b/src/linux/sparc/syscallent.h
index e3321f448..051a5b964 100644
--- a/src/linux/sparc/syscallent.h
+++ b/src/linux/sparc/syscallent.h
@@ -64,7 +64,7 @@
[ 56] = { 6, TD|TM|SI, SEN(mmap_4koff), "mmap2" },
[ 57] = { 2, TF, SEN(symlink), "symlink" },
[ 58] = { 3, TF, SEN(readlink), "readlink" },
-[ 59] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 59] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 60] = { 1, NF, SEN(umask), "umask" },
[ 61] = { 1, TF, SEN(chroot), "chroot" },
[ 62] = { 2, TD|TFST|TSTA, SEN(fstat), "fstat" },
@@ -152,7 +152,7 @@
[144] = { 2, 0, SEN(getrlimit), "getrlimit" },
[145] = { 2, 0, SEN(setrlimit), "setrlimit" },
[146] = { 2, TF, SEN(pivotroot), "pivot_root" },
-[147] = { 5, TC, SEN(prctl), "prctl" },
+[147] = { 5, CC|TC, SEN(prctl), "prctl" },
[148] = { 5, 0, SEN(printargs), "pciconfig_read" },
[149] = { 5, 0, SEN(printargs), "pciconfig_write" },
[150] = { 3, TN, SEN(getsockname), "getsockname" },
@@ -355,7 +355,7 @@
[347] = { 3, 0, SEN(getrandom), "getrandom" },
[348] = { 2, TD, SEN(memfd_create), "memfd_create" },
[349] = { 3, TD, SEN(bpf), "bpf" },
-[350] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[350] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[351] = { 3, 0, SEN(membarrier), "membarrier" },
[352] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[353] = { 3, TN, SEN(bind), "bind" },
diff --git a/src/linux/sparc64/syscallent.h b/src/linux/sparc64/syscallent.h
index 94471f0c7..246343375 100644
--- a/src/linux/sparc64/syscallent.h
+++ b/src/linux/sparc64/syscallent.h
@@ -16,7 +16,7 @@
[ 8] = { 2, TD|TF, SEN(creat), "creat" },
[ 9] = { 2, TF, SEN(link), "link" },
[ 10] = { 1, TF, SEN(unlink), "unlink" },
-[ 11] = { 2, TF|TP|TSD|SE|SI, SEN(execv), "execv" },
+[ 11] = { 2, CC|TF|TP|TSD|SE|SI, SEN(execv), "execv" },
[ 12] = { 1, TF, SEN(chdir), "chdir" },
[ 13] = { 3, TF, SEN(chown), "chown" },
[ 14] = { 3, TF, SEN(mknod), "mknod" },
@@ -150,7 +150,7 @@
[144] = { 2, 0, SEN(getrlimit), "getrlimit" },
[145] = { 2, 0, SEN(setrlimit), "setrlimit" },
[146] = { 2, TF, SEN(pivotroot), "pivot_root" },
-[147] = { 5, TC, SEN(prctl), "prctl" },
+[147] = { 5, CC|TC, SEN(prctl), "prctl" },
[148] = { 5, 0, SEN(printargs), "pciconfig_read" },
[149] = { 5, 0, SEN(printargs), "pciconfig_write" },
[150] = { 3, TN, SEN(getsockname), "getsockname" },
@@ -353,7 +353,7 @@
[347] = { 3, 0, SEN(getrandom), "getrandom" },
[348] = { 2, TD, SEN(memfd_create), "memfd_create" },
[349] = { 3, TD, SEN(bpf), "bpf" },
-[350] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[350] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[351] = { 3, 0, SEN(membarrier), "membarrier" },
[352] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[353] = { 3, TN, SEN(bind), "bind" },
diff --git a/src/linux/x32/syscallent.h b/src/linux/x32/syscallent.h
index 38d70ad29..e821ab1fa 100644
--- a/src/linux/x32/syscallent.h
+++ b/src/linux/x32/syscallent.h
@@ -162,7 +162,7 @@
[154] = { 3, 0, SEN(modify_ldt), "modify_ldt" },
[155] = { 2, TF, SEN(pivotroot), "pivot_root" },
[156] = { 1, 0, SEN(printargs), "_sysctl#64" },
-[157] = { 5, TC, SEN(prctl), "prctl" },
+[157] = { 5, CC|TC, SEN(prctl), "prctl" },
[158] = { 2, 0, SEN(arch_prctl), "arch_prctl" },
[159] = { 1, TCL, SEN(adjtimex64), "adjtimex" },
[160] = { 2, 0, SEN(setrlimit), "setrlimit" },
@@ -354,7 +354,7 @@
[517] = { 6, CST|TN, SEN(recvfrom), "recvfrom" },
[518] = { 3, CST|TN, SEN(sendmsg), "sendmsg" },
[519] = { 3, CST|TN, SEN(recvmsg), "recvmsg" },
-[520] = { 3, CST|TF|TP|TSD|SE|SI,SEN(execve), "execve" },
+[520] = { 3, CC|CST|TF|TP|TSD|SE|SI,SEN(execve), "execve" },
[521] = { 4, CST, SEN(ptrace), "ptrace" },
[522] = { 2, CST|TS, SEN(rt_sigpending), "rt_sigpending" },
[523] = { 4, CST|TS, SEN(rt_sigtimedwait_time64), "rt_sigtimedwait" },
@@ -379,6 +379,6 @@
[542] = { 5, CST|TN, SEN(getsockopt), "getsockopt" },
[543] = { 2, CST|TM, SEN(io_setup), "io_setup" },
[544] = { 3, CST, SEN(io_submit), "io_submit" },
-[545] = { 5, CST|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[545] = { 5, CST|CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[546] = { 5, TD, SEN(preadv2), "preadv2" },
[547] = { 5, TD, SEN(pwritev2), "pwritev2" },
diff --git a/src/linux/x86_64/syscallent.h b/src/linux/x86_64/syscallent.h
index b6eb3d3d3..9fd1e3f22 100644
--- a/src/linux/x86_64/syscallent.h
+++ b/src/linux/x86_64/syscallent.h
@@ -64,7 +64,7 @@
[ 56] = { 5, TP, SEN(clone), "clone" },
[ 57] = { 0, TP, SEN(fork), "fork" },
[ 58] = { 0, TP, SEN(vfork), "vfork" },
-[ 59] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[ 59] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[ 60] = { 1, TP|SE, SEN(exit), "exit" },
[ 61] = { 4, TP, SEN(wait4), "wait4" },
[ 62] = { 2, TS|TP, SEN(kill), "kill" },
@@ -162,7 +162,7 @@
[154] = { 3, 0, SEN(modify_ldt), "modify_ldt" },
[155] = { 2, TF, SEN(pivotroot), "pivot_root" },
[156] = { 1, 0, SEN(sysctl), "_sysctl" },
-[157] = { 5, TC, SEN(prctl), "prctl" },
+[157] = { 5, CC|TC, SEN(prctl), "prctl" },
[158] = { 2, 0, SEN(arch_prctl), "arch_prctl" },
[159] = { 1, TCL, SEN(adjtimex64), "adjtimex" },
[160] = { 2, 0, SEN(setrlimit), "setrlimit" },
@@ -327,7 +327,7 @@
[319] = { 2, TD, SEN(memfd_create), "memfd_create" },
[320] = { 5, TD, SEN(kexec_file_load), "kexec_file_load" },
[321] = { 3, TD, SEN(bpf), "bpf" },
-[322] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[322] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[323] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[324] = { 3, 0, SEN(membarrier), "membarrier" },
[325] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/linux/xtensa/syscallent.h b/src/linux/xtensa/syscallent.h
index eb6425d53..09fed329c 100644
--- a/src/linux/xtensa/syscallent.h
+++ b/src/linux/xtensa/syscallent.h
@@ -117,7 +117,7 @@
[114] = { 4, TD|TN, SEN(sendfile64), "sendfile64" },
[115] = { 4, TN, SEN(sendmmsg), "sendmmsg" },
[116] = { 5, TP, SEN(clone), "clone" },
-[117] = { 3, TF|TP|TSD|SE|SI, SEN(execve), "execve" },
+[117] = { 3, CC|TF|TP|TSD|SE|SI, SEN(execve), "execve" },
[118] = { 1, TP|SE, SEN(exit), "exit" },
[119] = { 1, TP|SE, SEN(exit), "exit_group" },
[120] = { 0, PU|NF, SEN(getpid), "getpid" },
@@ -130,7 +130,7 @@
[127] = { 0, PU|NF, SEN(gettid), "gettid" },
[128] = { 0, 0, SEN(setsid), "setsid" },
[129] = { 1, 0, SEN(getsid), "getsid" },
-[130] = { 5, TC, SEN(prctl), "prctl" },
+[130] = { 5, CC|TC, SEN(prctl), "prctl" },
[131] = { 1, NF, SEN(personality), "personality" },
[132] = { 2, 0, SEN(getpriority), "getpriority" },
[133] = { 3, 0, SEN(setpriority), "setpriority" },
@@ -336,7 +336,7 @@
[338] = { 3, 0, SEN(getrandom), "getrandom" },
[339] = { 2, TD, SEN(memfd_create), "memfd_create" },
[340] = { 3, TD, SEN(bpf), "bpf" },
-[341] = { 5, TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
+[341] = { 5, CC|TD|TF|TP|TSD|SE|SI, SEN(execveat), "execveat" },
[342] = { 1, TD, SEN(userfaultfd), "userfaultfd" },
[343] = { 3, 0, SEN(membarrier), "membarrier" },
[344] = { 3, TM, SEN(mlock2), "mlock2" },
diff --git a/src/strace.c b/src/strace.c
index fb42fe97d..fd230a263 100644
--- a/src/strace.c
+++ b/src/strace.c
@@ -52,6 +52,10 @@ extern char *optarg;
bool stack_trace_enabled;
#endif
+/* if this is non-zero
+ * print the process names read from /proc/$pid/comm files */
+unsigned decode_pids_enabled;
+
#define my_tkill(tid, sig) syscall(__NR_tkill, (tid), (sig))
/* Glue for systems without a MMU that cannot provide fork() */
@@ -905,6 +909,40 @@ expand_tcbtab(void)
*tcb_ptr = newtcbs;
}
+/* load the contenst of /proc/$pid/comm into $buf. */
+static void
+load_pid_comm(int pid, char *buf, size_t buf_size)
+{
+ static const char comm_path[] = "/proc/%d/comm";
+ char procfile[sizeof(comm_path) + sizeof(int) * 3];
+
+ if (buf_size == 0)
+ return;
+
+ buf [0] = '\0';
+
+ xsprintf(procfile, comm_path, pid);
+ FILE *fp = fopen_stream(procfile, "r");
+ if (!fp)
+ return;
+
+ if (fgets(buf, buf_size, fp)) {
+ /* Trim the last newline. */
+ char *nl = strrchr(buf, '\n');
+ if (nl)
+ *nl = '\0';
+ }
+ fclose(fp);
+}
+
+void
+maybe_load_task_comm(struct tcb *tcp)
+{
+ if (!decode_pids_enabled)
+ return;
+ load_pid_comm(get_proc_pid(tcp), tcp->comm, sizeof(tcp->comm));
+}
+
static struct tcb *
alloctcb(int pid)
{
@@ -920,6 +958,7 @@ alloctcb(int pid)
memset(tcp, 0, sizeof(*tcp));
list_init(&tcp->wait_list);
tcp->pid = pid;
+ maybe_load_task_comm(tcp);
#if SUPPORTED_PERSONALITIES > 1
tcp->currpers = current_personality;
#endif
diff --git a/src/syscall.c b/src/syscall.c
index eb068c2c4..a5bb1d3c9 100644
--- a/src/syscall.c
+++ b/src/syscall.c
@@ -29,6 +29,9 @@
/* for struct iovec */
#include <sys/uio.h>
+/* for PR_SET_NAME */
+#include <linux/prctl.h>
+
/* for __X32_SYSCALL_BIT */
#include "scno.h"
@@ -739,6 +742,11 @@ syscall_exiting_decode(struct tcb *tcp, struct timespec *pts)
if (tcp_sysent(tcp)->sys_flags & MEMORY_MAPPING_CHANGE)
mmap_notify_report(tcp);
+ if ((tcp_sysent(tcp)->sys_flags & COMM_CHANGE)
+ && ((tcp_sysent(tcp)->sen == SEN_prctl && tcp->u_arg[0] == PR_SET_NAME)
+ || tcp_sysent(tcp)->sen != SEN_prctl))
+ maybe_load_task_comm(tcp);
+
if (filtered(tcp))
return 0;
diff --git a/src/sysent.h b/src/sysent.h
index f45a00baf..d9d4b187f 100644
--- a/src/sysent.h
+++ b/src/sysent.h
@@ -39,5 +39,6 @@ typedef struct sysent {
# define TRACE_SECCOMP_DEFAULT 004000000 /* Syscall is traced by seccomp filter by default. */
# define TRACE_CREDS 010000000 /* Trace process credentials-related syscalls. */
# define TRACE_CLOCK 020000000 /* Trace syscalls reading or modifying system clocks. */
+# define COMM_CHANGE 040000000 /* /proc/$pid/comm is updated. */
#endif /* !STRACE_SYSENT_H */
diff --git a/src/sysent_shorthand_defs.h b/src/sysent_shorthand_defs.h
index 5b4d87dbf..4cf65342a 100644
--- a/src/sysent_shorthand_defs.h
+++ b/src/sysent_shorthand_defs.h
@@ -30,6 +30,7 @@
# define TSD 0
# define TC 0
# define TCL 0
+# define CC 0
# define SEN(a) 0, 0
#else /* !STRACE_TESTS_H */
@@ -57,6 +58,7 @@
# define TSD TRACE_SECCOMP_DEFAULT
# define TC TRACE_CREDS
# define TCL TRACE_CLOCK
+# define CC COMM_CHANGE
/* SEN(a) is defined elsewhere */
#endif
diff --git a/src/sysent_shorthand_undefs.h b/src/sysent_shorthand_undefs.h
index fbc74bc90..b5ce3c6b2 100644
--- a/src/sysent_shorthand_undefs.h
+++ b/src/sysent_shorthand_undefs.h
@@ -28,4 +28,5 @@
#undef TSD
#undef TC
#undef TCL
+#undef CC
#undef SEN
--
2.31.1
More information about the Strace-devel
mailing list