Print this page
OS-5192 need faster clock_gettime
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Robert Mustacchi <rm@joyent.com>
Reviewed by: Joshua M. Clulow <jmc@joyent.com>
Reviewed by: Ryan Zezeski <ryan@zinascii.com>
OS-5072 lxbrand support PT_GNU_STACK
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-4119 lxbrand panic when running native perl inside lx zone
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-3611 lx brand: 64-bit processes should not use VAs above VA hole
OS-3517 lx brand: branded zones don't interpret .interp section
OS-3280 need a way to specify the root of a native system in the lx brand
OS-3279 lx brand should allow delegated datasets
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
OS-2877 lx_librtld_db falls to load due to NULL DT_DEBUG
        
*** 24,33 ****
--- 24,37 ----
   */
  
  /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
  /*        All Rights Reserved   */
  
+ /*
+  * Copyright 2016, Joyent, Inc.
+  */
+ 
  #ifndef _SYS_EXEC_H
  #define _SYS_EXEC_H
  
  #include <sys/systm.h>
  #include <vm/seg.h>
*** 100,113 ****
--- 104,121 ----
          uintptr_t entry;
          uintptr_t thrptr;
          vnode_t *ex_vp;
          char    *emulator;
          char    *brandname;
+         const char *brand_nroot;
          char    *auxp_auxflags; /* addr of auxflags auxv on the user stack */
          char    *auxp_brand; /* address of first brand auxv on user stack */
          cred_t  *pfcred;
          boolean_t scrubenv;
+         uintptr_t maxstack;
+         boolean_t stk_prot_override;
+         uintptr_t commpage;
  } uarg_t;
  
  /*
   * Possible brand actions for exec.
   */
*** 173,183 ****
          int     exec_magoff;
          int     exec_maglen;
          int     (*exec_func)(struct vnode *vp, struct execa *uap,
                      struct uarg *args, struct intpdata *idata, int level,
                      long *execsz, int setid, caddr_t exec_file,
!                     struct cred *cred, int brand_action);
          int     (*exec_core)(struct vnode *vp, struct proc *p,
                      struct cred *cred, rlim64_t rlimit, int sig,
                      core_content_t content);
          krwlock_t       *exec_lock;
  };
--- 181,191 ----
          int     exec_magoff;
          int     exec_maglen;
          int     (*exec_func)(struct vnode *vp, struct execa *uap,
                      struct uarg *args, struct intpdata *idata, int level,
                      long *execsz, int setid, caddr_t exec_file,
!                     struct cred *cred, int *brand_action);
          int     (*exec_core)(struct vnode *vp, struct proc *p,
                      struct cred *cred, rlim64_t rlimit, int sig,
                      core_content_t content);
          krwlock_t       *exec_lock;
  };
*** 211,221 ****
  extern int exece(const char *fname, const char **argp, const char **envp);
  extern int exec_common(const char *fname, const char **argp,
      const char **envp, int brand_action);
  extern int gexec(vnode_t **vp, struct execa *uap, struct uarg *args,
      struct intpdata *idata, int level, long *execsz, caddr_t exec_file,
!     struct cred *cred, int brand_action);
  extern struct execsw *allocate_execsw(char *name, char *magic,
      size_t magic_size);
  extern struct execsw *findexecsw(char *magic);
  extern struct execsw *findexec_by_hdr(char *header);
  extern struct execsw *findexec_by_magic(char *magic);
--- 219,229 ----
  extern int exece(const char *fname, const char **argp, const char **envp);
  extern int exec_common(const char *fname, const char **argp,
      const char **envp, int brand_action);
  extern int gexec(vnode_t **vp, struct execa *uap, struct uarg *args,
      struct intpdata *idata, int level, long *execsz, caddr_t exec_file,
!     struct cred *cred, int *brand_action);
  extern struct execsw *allocate_execsw(char *name, char *magic,
      size_t magic_size);
  extern struct execsw *findexecsw(char *magic);
  extern struct execsw *findexec_by_hdr(char *header);
  extern struct execsw *findexec_by_magic(char *magic);
*** 236,255 ****
  /*
   * When compiling 64-bit kernels we don't want these definitions included
   * when compiling the 32-bit compatability elf code in the elfexec module.
   */
  extern int elfexec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
!     long *, int, caddr_t, cred_t *, int);
  extern int mapexec_brand(vnode_t *, uarg_t *, Ehdr *, Addr *,
!     intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
  #endif /* !_ELF32_COMPAT */
  
  #if defined(_LP64)
  extern int elf32exec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
!     long *, int, caddr_t, cred_t *, int);
  extern int mapexec32_brand(vnode_t *, uarg_t *, Elf32_Ehdr *, Elf32_Addr *,
!     intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
  #endif  /* _LP64 */
  
  /*
   * Utility functions for exec module core routines:
   */
--- 244,269 ----
  /*
   * When compiling 64-bit kernels we don't want these definitions included
   * when compiling the 32-bit compatability elf code in the elfexec module.
   */
  extern int elfexec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
!     long *, int, caddr_t, cred_t *, int *);
  extern int mapexec_brand(vnode_t *, uarg_t *, Ehdr *, Addr *,
!     intptr_t *, caddr_t, char **, caddr_t *, caddr_t *, size_t *,
!     uintptr_t *, uintptr_t *);
! extern int elfreadhdr(vnode_t *, cred_t *, Ehdr *, int *, caddr_t *,
!     ssize_t *);
  #endif /* !_ELF32_COMPAT */
  
  #if defined(_LP64)
  extern int elf32exec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
!     long *, int, caddr_t, cred_t *, int *);
  extern int mapexec32_brand(vnode_t *, uarg_t *, Elf32_Ehdr *, Elf32_Addr *,
!     intptr_t *, caddr_t, char **, caddr_t *, caddr_t *, size_t *,
!     uintptr_t *, uintptr_t *);
! extern int elf32readhdr(vnode_t *, cred_t *, Elf32_Ehdr *, int *, caddr_t *,
!     ssize_t *);
  #endif  /* _LP64 */
  
  /*
   * Utility functions for exec module core routines:
   */