summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2013-09-19 18:53:42 +0000
committerjhb <jhb@FreeBSD.org>2013-09-19 18:53:42 +0000
commitd3ef75b6c79e9e6d642efa9c32a96524d7a5a5b7 (patch)
tree56c7a97f082d488a8b917c2d2d52956076373329 /sys/compat
parent8ecfe4666e7be9cea4cf6c3ef929de2e8d286f41 (diff)
downloadFreeBSD-src-d3ef75b6c79e9e6d642efa9c32a96524d7a5a5b7.zip
FreeBSD-src-d3ef75b6c79e9e6d642efa9c32a96524d7a5a5b7.tar.gz
Extend the support for exempting processes from being killed when swap is
exhausted. - Add a new protect(1) command that can be used to set or revoke protection from arbitrary processes. Similar to ktrace it can apply a change to all existing descendants of a process as well as future descendants. - Add a new procctl(2) system call that provides a generic interface for control operations on processes (as opposed to the debugger-specific operations provided by ptrace(2)). procctl(2) uses a combination of idtype_t and an id to identify the set of processes on which to operate similar to wait6(). - Add a PROC_SPROTECT control operation to manage the protection status of a set of processes. MADV_PROTECT still works for backwards compatability. - Add a p_flag2 to struct proc (and a corresponding ki_flag2 to kinfo_proc) the first bit of which is used to track if P_PROTECT should be inherited by new child processes. Reviewed by: kib, jilles (earlier version) Approved by: re (delphij) MFC after: 1 month
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/freebsd32/freebsd32.h1
-rw-r--r--sys/compat/freebsd32/freebsd32_misc.c21
-rw-r--r--sys/compat/freebsd32/syscalls.master9
3 files changed, 31 insertions, 0 deletions
diff --git a/sys/compat/freebsd32/freebsd32.h b/sys/compat/freebsd32/freebsd32.h
index aa08432..e6644f6 100644
--- a/sys/compat/freebsd32/freebsd32.h
+++ b/sys/compat/freebsd32/freebsd32.h
@@ -342,6 +342,7 @@ struct kinfo_proc32 {
char ki_loginclass[LOGINCLASSLEN+1];
char ki_sparestrings[50];
int ki_spareints[KI_NSPARE_INT];
+ int ki_flag2;
int ki_fibnum;
u_int ki_cr_flags;
int ki_jid;
diff --git a/sys/compat/freebsd32/freebsd32_misc.c b/sys/compat/freebsd32/freebsd32_misc.c
index dbdafeb..deb03f3 100644
--- a/sys/compat/freebsd32/freebsd32_misc.c
+++ b/sys/compat/freebsd32/freebsd32_misc.c
@@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mutex.h>
#include <sys/namei.h>
#include <sys/proc.h>
+#include <sys/procctl.h>
#include <sys/reboot.h>
#include <sys/resource.h>
#include <sys/resourcevar.h>
@@ -3000,3 +3001,23 @@ convert_sigevent32(struct sigevent32 *sig32, struct sigevent *sig)
}
return (0);
}
+
+int
+freebsd32_procctl(struct thread *td, struct freebsd32_procctl_args *uap)
+{
+ void *data;
+ int error, flags;
+
+ switch (uap->com) {
+ case PROC_SPROTECT:
+ error = copyin(PTRIN(uap->data), &flags, sizeof(flags));
+ if (error)
+ return (error);
+ data = &flags;
+ break;
+ default:
+ return (EINVAL);
+ }
+ return (kern_procctl(td, uap->idtype, PAIR32TO64(id_t, uap->id),
+ uap->com, data));
+}
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index c52256a..90c3e75 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -1056,3 +1056,12 @@
542 AUE_PIPE NOPROTO { int pipe2(int *fildes, int flags); }
543 AUE_NULL NOSTD { int freebsd32_aio_mlock( \
struct aiocb32 *aiocbp); }
+#ifdef PAD64_REQUIRED
+544 AUE_NULL STD { int freebsd32_procctl(int idtype, int pad, \
+ uint32_t id1, uint32_t id2, int com, \
+ void *data); }
+#else
+544 AUE_NULL STD { int freebsd32_procctl(int idtype, \
+ uint32_t id1, uint32_t id2, int com, \
+ void *data); }
+#endif
OpenPOWER on IntegriCloud