home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / binfmts.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.4 KB  |  111 lines

  1. #ifndef _LINUX_BINFMTS_H
  2. #define _LINUX_BINFMTS_H
  3.  
  4. #include <linux/capability.h>
  5.  
  6. struct pt_regs;
  7.  
  8. /*
  9.  * These are the maximum length and maximum number of strings passed to the
  10.  * execve() system call.  MAX_ARG_STRLEN is essentially random but serves to
  11.  * prevent the kernel from being unduly impacted by misaddressed pointers.
  12.  * MAX_ARG_STRINGS is chosen to fit in a signed 32-bit integer.
  13.  */
  14. #define MAX_ARG_STRLEN (PAGE_SIZE * 32)
  15. #define MAX_ARG_STRINGS 0x7FFFFFFF
  16.  
  17. /* sizeof(linux_binprm->buf) */
  18. #define BINPRM_BUF_SIZE 128
  19.  
  20. #ifdef __KERNEL__
  21.  
  22. #define CORENAME_MAX_SIZE 128
  23.  
  24. /*
  25.  * This structure is used to hold the arguments that are used when loading binaries.
  26.  */
  27. struct linux_binprm{
  28.     char buf[BINPRM_BUF_SIZE];
  29. #ifdef CONFIG_MMU
  30.     struct vm_area_struct *vma;
  31. #else
  32. # define MAX_ARG_PAGES    32
  33.     struct page *page[MAX_ARG_PAGES];
  34. #endif
  35.     struct mm_struct *mm;
  36.     unsigned long p; /* current top of mem */
  37.     unsigned int sh_bang:1,
  38.              misc_bang:1;
  39. #ifdef __alpha__
  40.     unsigned int taso:1;
  41. #endif
  42.     unsigned int recursion_depth;
  43.     struct file * file;
  44.     int e_uid, e_gid;
  45.     kernel_cap_t cap_post_exec_permitted;
  46.     bool cap_effective;
  47.     void *security;
  48.     int argc, envc;
  49.     char * filename;    /* Name of binary as seen by procps */
  50.     char * interp;        /* Name of the binary really executed. Most
  51.                    of the time same as filename, but could be
  52.                    different for binfmt_{misc,script} */
  53.     unsigned interp_flags;
  54.     unsigned interp_data;
  55.     unsigned long loader, exec;
  56. };
  57.  
  58. #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
  59. #define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT)
  60.  
  61. /* fd of the binary should be passed to the interpreter */
  62. #define BINPRM_FLAGS_EXECFD_BIT 1
  63. #define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
  64.  
  65. #define BINPRM_MAX_RECURSION 4
  66.  
  67. /*
  68.  * This structure defines the functions that are used to load the binary formats that
  69.  * linux accepts.
  70.  */
  71. struct linux_binfmt {
  72.     struct list_head lh;
  73.     struct module *module;
  74.     int (*load_binary)(struct linux_binprm *, struct  pt_regs * regs);
  75.     int (*load_shlib)(struct file *);
  76.     int (*core_dump)(long signr, struct pt_regs *regs, struct file *file, unsigned long limit);
  77.     unsigned long min_coredump;    /* minimal dump size */
  78.     int hasvdso;
  79. };
  80.  
  81. extern int register_binfmt(struct linux_binfmt *);
  82. extern void unregister_binfmt(struct linux_binfmt *);
  83.  
  84. extern int prepare_binprm(struct linux_binprm *);
  85. extern int __must_check remove_arg_zero(struct linux_binprm *);
  86. extern int search_binary_handler(struct linux_binprm *,struct pt_regs *);
  87. extern int flush_old_exec(struct linux_binprm * bprm);
  88.  
  89. extern int suid_dumpable;
  90. #define SUID_DUMP_DISABLE    0    /* No setuid dumping */
  91. #define SUID_DUMP_USER        1    /* Dump as user of process */
  92. #define SUID_DUMP_ROOT        2    /* Dump as root */
  93.  
  94. /* Stack area protections */
  95. #define EXSTACK_DEFAULT   0    /* Whatever the arch defaults to */
  96. #define EXSTACK_DISABLE_X 1    /* Disable executable stacks */
  97. #define EXSTACK_ENABLE_X  2    /* Enable executable stacks */
  98.  
  99. extern int setup_arg_pages(struct linux_binprm * bprm,
  100.                unsigned long stack_top,
  101.                int executable_stack);
  102. extern int bprm_mm_init(struct linux_binprm *bprm);
  103. extern int copy_strings_kernel(int argc,char ** argv,struct linux_binprm *bprm);
  104. extern void compute_creds(struct linux_binprm *binprm);
  105. extern int do_coredump(long signr, int exit_code, struct pt_regs * regs);
  106. extern int set_binfmt(struct linux_binfmt *new);
  107. extern void free_bprm(struct linux_binprm *);
  108.  
  109. #endif /* __KERNEL__ */
  110. #endif /* _LINUX_BINFMTS_H */
  111.