summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorrobert <robert@FreeBSD.org>2003-07-12 02:00:16 +0000
committerrobert <robert@FreeBSD.org>2003-07-12 02:00:16 +0000
commit580d762f5f407a8cbe8330197062d997742bb781 (patch)
tree5cd456f1d90f9c25dc79f54a834aee30dc8b521d /sys
parent1b3342d50fedd77add829fa6c610d03da0f05e3e (diff)
downloadFreeBSD-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.c29
-rw-r--r--sys/sys/sysctl.h1
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
OpenPOWER on IntegriCloud