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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/sys/exec.h
          +++ new/usr/src/uts/common/sys/exec.h
↓ open down ↓ 18 lines elided ↑ open up ↑
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright (c) 1989, 2010, Oracle and/or its affiliates. All rights reserved.
  24   24   */
  25   25  
  26   26  /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
  27   27  /*        All Rights Reserved   */
  28   28  
       29 +/*
       30 + * Copyright 2016, Joyent, Inc.
       31 + */
       32 +
  29   33  #ifndef _SYS_EXEC_H
  30   34  #define _SYS_EXEC_H
  31   35  
  32   36  #include <sys/systm.h>
  33   37  #include <vm/seg.h>
  34   38  #include <vm/seg_vn.h>
  35   39  #include <sys/model.h>
  36   40  #include <sys/uio.h>
  37   41  #include <sys/corectl.h>
  38   42  #include <sys/machelf.h>
↓ open down ↓ 56 lines elided ↑ open up ↑
  95   99          model_t from_model;
  96  100          size_t  to_ptrsize;
  97  101          size_t  from_ptrsize;
  98  102          size_t  ncargs;
  99  103          struct execsw *execswp;
 100  104          uintptr_t entry;
 101  105          uintptr_t thrptr;
 102  106          vnode_t *ex_vp;
 103  107          char    *emulator;
 104  108          char    *brandname;
      109 +        const char *brand_nroot;
 105  110          char    *auxp_auxflags; /* addr of auxflags auxv on the user stack */
 106  111          char    *auxp_brand; /* address of first brand auxv on user stack */
 107  112          cred_t  *pfcred;
 108  113          boolean_t scrubenv;
      114 +        uintptr_t maxstack;
      115 +        boolean_t stk_prot_override;
      116 +        uintptr_t commpage;
 109  117  } uarg_t;
 110  118  
 111  119  /*
 112  120   * Possible brand actions for exec.
 113  121   */
 114  122  #define EBA_NONE        0
 115  123  #define EBA_NATIVE      1
 116  124  #define EBA_BRAND       2
 117  125  
 118  126  /*
↓ open down ↓ 49 lines elided ↑ open up ↑
 168  176  #define EXECSETID_UGIDS         0x2 /* [ug]ids mismatch */
 169  177  #define EXECSETID_PRIVS         0x4 /* more privs than before */
 170  178  
 171  179  struct execsw {
 172  180          char    *exec_magic;
 173  181          int     exec_magoff;
 174  182          int     exec_maglen;
 175  183          int     (*exec_func)(struct vnode *vp, struct execa *uap,
 176  184                      struct uarg *args, struct intpdata *idata, int level,
 177  185                      long *execsz, int setid, caddr_t exec_file,
 178      -                    struct cred *cred, int brand_action);
      186 +                    struct cred *cred, int *brand_action);
 179  187          int     (*exec_core)(struct vnode *vp, struct proc *p,
 180  188                      struct cred *cred, rlim64_t rlimit, int sig,
 181  189                      core_content_t content);
 182  190          krwlock_t       *exec_lock;
 183  191  };
 184  192  
 185  193  extern int nexectype;           /* number of elements in execsw */
 186  194  extern struct execsw execsw[];
 187  195  extern kmutex_t execsw_lock;
 188  196  
↓ open down ↓ 17 lines elided ↑ open up ↑
 206  214  extern char aout_omagicstr[];
 207  215  #endif
 208  216  extern char nomagicstr[];
 209  217  
 210  218  extern int exec_args(execa_t *, uarg_t *, intpdata_t *, void **);
 211  219  extern int exece(const char *fname, const char **argp, const char **envp);
 212  220  extern int exec_common(const char *fname, const char **argp,
 213  221      const char **envp, int brand_action);
 214  222  extern int gexec(vnode_t **vp, struct execa *uap, struct uarg *args,
 215  223      struct intpdata *idata, int level, long *execsz, caddr_t exec_file,
 216      -    struct cred *cred, int brand_action);
      224 +    struct cred *cred, int *brand_action);
 217  225  extern struct execsw *allocate_execsw(char *name, char *magic,
 218  226      size_t magic_size);
 219  227  extern struct execsw *findexecsw(char *magic);
 220  228  extern struct execsw *findexec_by_hdr(char *header);
 221  229  extern struct execsw *findexec_by_magic(char *magic);
 222  230  extern int execpermissions(struct vnode *vp, struct vattr *vattrp,
 223  231      struct uarg *args);
 224  232  extern int execmap(vnode_t *vp, caddr_t addr, size_t len, size_t zfodlen,
 225  233      off_t offset, int prot, int page, uint_t);
 226  234  extern void setexecenv(struct execenv *ep);
↓ open down ↓ 4 lines elided ↑ open up ↑
 231  239  
 232  240  /*
 233  241   * Utility functions for branded process executing
 234  242   */
 235  243  #if !defined(_ELF32_COMPAT)
 236  244  /*
 237  245   * When compiling 64-bit kernels we don't want these definitions included
 238  246   * when compiling the 32-bit compatability elf code in the elfexec module.
 239  247   */
 240  248  extern int elfexec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
 241      -    long *, int, caddr_t, cred_t *, int);
      249 +    long *, int, caddr_t, cred_t *, int *);
 242  250  extern int mapexec_brand(vnode_t *, uarg_t *, Ehdr *, Addr *,
 243      -    intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
      251 +    intptr_t *, caddr_t, char **, caddr_t *, caddr_t *, size_t *,
      252 +    uintptr_t *, uintptr_t *);
      253 +extern int elfreadhdr(vnode_t *, cred_t *, Ehdr *, int *, caddr_t *,
      254 +    ssize_t *);
 244  255  #endif /* !_ELF32_COMPAT */
 245  256  
 246  257  #if defined(_LP64)
 247  258  extern int elf32exec(vnode_t *, execa_t *, uarg_t *, intpdata_t *, int,
 248      -    long *, int, caddr_t, cred_t *, int);
      259 +    long *, int, caddr_t, cred_t *, int *);
 249  260  extern int mapexec32_brand(vnode_t *, uarg_t *, Elf32_Ehdr *, Elf32_Addr *,
 250      -    intptr_t *, caddr_t, int *, caddr_t *, caddr_t *, size_t *, uintptr_t *);
      261 +    intptr_t *, caddr_t, char **, caddr_t *, caddr_t *, size_t *,
      262 +    uintptr_t *, uintptr_t *);
      263 +extern int elf32readhdr(vnode_t *, cred_t *, Elf32_Ehdr *, int *, caddr_t *,
      264 +    ssize_t *);
 251  265  #endif  /* _LP64 */
 252  266  
 253  267  /*
 254  268   * Utility functions for exec module core routines:
 255  269   */
 256  270  extern int core_seg(proc_t *, vnode_t *, offset_t, caddr_t,
 257  271      size_t, rlim64_t, cred_t *);
 258  272  
 259  273  extern int core_write(vnode_t *, enum uio_seg, offset_t,
 260  274      const void *, size_t, rlim64_t, cred_t *);
↓ open down ↓ 20 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX