diff options
author | robert <robert@FreeBSD.org> | 2003-07-12 02:00:16 +0000 |
---|---|---|
committer | robert <robert@FreeBSD.org> | 2003-07-12 02:00:16 +0000 |
commit | 580d762f5f407a8cbe8330197062d997742bb781 (patch) | |
tree | 5cd456f1d90f9c25dc79f54a834aee30dc8b521d /sys | |
parent | 1b3342d50fedd77add829fa6c610d03da0f05e3e (diff) | |
download | FreeBSD-src-580d762f5f407a8cbe8330197062d997742bb781.zip FreeBSD-src-580d762f5f407a8cbe8330197062d997742bb781.tar.gz |
Make the system call vector name of a process accessible to user
land applications by introducing the KERN_PROC_SV_NAME sysctl node,
which is searchable by PID.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_proc.c | 29 | ||||
-rw-r--r-- | sys/sys/sysctl.h | 1 |
2 files changed, 30 insertions, 0 deletions
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c index 0625cf9..e4981e2 100644 --- a/sys/kern/kern_proc.c +++ b/sys/kern/kern_proc.c @@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$"); #include <sys/malloc.h> #include <sys/mutex.h> #include <sys/proc.h> +#include <sys/sysent.h> #include <sys/kse.h> #include <sys/sched.h> #include <sys/smp.h> @@ -1127,6 +1128,31 @@ sysctl_kern_proc_args(SYSCTL_HANDLER_ARGS) return (0); } +static int +sysctl_kern_proc_sv_name(SYSCTL_HANDLER_ARGS) +{ + struct proc *p; + char *sv_name; + int *name; + int namelen; + + namelen = arg2; + if (namelen != 1) + return (EINVAL); + + name = (int *)arg1; + if ((p = pfind((pid_t)name[0])) == NULL) + return (0); + if (p_cansee(curthread, p)) { + PROC_UNLOCK(p); + return (0); + } + sv_name = p->p_sysent->sv_name; + PROC_UNLOCK(p); + return (sysctl_handle_string(oidp, sv_name, 0, req)); +} + + SYSCTL_NODE(_kern, KERN_PROC, proc, CTLFLAG_RD, 0, "Process table"); SYSCTL_PROC(_kern_proc, KERN_PROC_ALL, all, CTLFLAG_RD|CTLTYPE_STRUCT, @@ -1152,3 +1178,6 @@ SYSCTL_NODE(_kern_proc, KERN_PROC_PROC, proc, CTLFLAG_RD, SYSCTL_NODE(_kern_proc, KERN_PROC_ARGS, args, CTLFLAG_RW | CTLFLAG_ANYBODY, sysctl_kern_proc_args, "Process argument list"); + +SYSCTL_NODE(_kern_proc, KERN_PROC_SV_NAME, sv_name, CTLFLAG_RD, + sysctl_kern_proc_sv_name, "Process syscall vector name (ABI type)"); diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h index 7c6e0fd..845ecef 100644 --- a/sys/sys/sysctl.h +++ b/sys/sys/sysctl.h @@ -413,6 +413,7 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry); #define KERN_PROC_RUID 6 /* by real uid */ #define KERN_PROC_ARGS 7 /* get/set arguments/proctitle */ #define KERN_PROC_PROC 8 /* only return procs */ +#define KERN_PROC_SV_NAME 9 /* get syscall vector name */ /* * KERN_IPC identifiers |