Print this page
uts: Allow for address space randomisation.
Randomise the base addresses of shared objects, non-fixed mappings, the
stack and the heap.  Introduce a service, svc:/system/process-security,
and a tool psecflags(1) to control and observe it

@@ -45,10 +45,11 @@
 #include <sys/avl.h>
 #include <sys/rctl.h>
 #include <sys/list.h>
 #include <sys/avl.h>
 #include <sys/door_impl.h>
+#include <sys/secflags.h>
 
 #ifdef  __cplusplus
 extern "C" {
 #endif
 

@@ -345,10 +346,11 @@
         uintptr_t       p_portcnt;      /* event ports counter */
         struct zone     *p_zone;        /* zone in which process lives */
         struct vnode    *p_execdir;     /* directory that p_exec came from */
         struct brand    *p_brand;       /* process's brand  */
         void            *p_brand_data;  /* per-process brand state */
+        psecflags_t     p_secflags;     /* per-process security flags */
 
         /* additional lock to protect p_sessp (but not its contents) */
         kmutex_t p_splock;
         rctl_qty_t      p_locked_mem;   /* locked memory charged to proc */
                                         /* protected by p_lock */

@@ -782,10 +784,17 @@
 #else
 #define LWP_MMODEL_NEWLWP()
 #define LWP_MMODEL_SHARED_AS(addr, sz)
 #endif
 
+/* Security flag manipulation */
+extern boolean_t secflag_enabled(proc_t *, uint_t);
+extern void secflag_set(proc_t *, uint_t);
+extern void secflag_enable(proc_t *, uint_t);
+extern void secflag_disable(proc_t *, uint_t);
+extern void secflag_promote(proc_t *);
+
 /*
  * Signal queue function prototypes. Must be here due to header ordering
  * dependencies.
  */
 extern void sigqfree(proc_t *);