at v4.12 4.5 kB view raw
1#ifndef _LINUX_BINFMTS_H 2#define _LINUX_BINFMTS_H 3 4#include <linux/sched.h> 5#include <linux/unistd.h> 6#include <asm/exec.h> 7#include <uapi/linux/binfmts.h> 8 9struct filename; 10 11#define CORENAME_MAX_SIZE 128 12 13/* 14 * This structure is used to hold the arguments that are used when loading binaries. 15 */ 16struct linux_binprm { 17 char buf[BINPRM_BUF_SIZE]; 18#ifdef CONFIG_MMU 19 struct vm_area_struct *vma; 20 unsigned long vma_pages; 21#else 22# define MAX_ARG_PAGES 32 23 struct page *page[MAX_ARG_PAGES]; 24#endif 25 struct mm_struct *mm; 26 unsigned long p; /* current top of mem */ 27 unsigned int 28 cred_prepared:1,/* true if creds already prepared (multiple 29 * preps happen for interpreters) */ 30 cap_effective:1;/* true if has elevated effective capabilities, 31 * false if not; except for init which inherits 32 * its parent's caps anyway */ 33#ifdef __alpha__ 34 unsigned int taso:1; 35#endif 36 unsigned int recursion_depth; /* only for search_binary_handler() */ 37 struct file * file; 38 struct cred *cred; /* new credentials */ 39 int unsafe; /* how unsafe this exec is (mask of LSM_UNSAFE_*) */ 40 unsigned int per_clear; /* bits to clear in current->personality */ 41 int argc, envc; 42 const char * filename; /* Name of binary as seen by procps */ 43 const char * interp; /* Name of the binary really executed. Most 44 of the time same as filename, but could be 45 different for binfmt_{misc,script} */ 46 unsigned interp_flags; 47 unsigned interp_data; 48 unsigned long loader, exec; 49}; 50 51#define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0 52#define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT) 53 54/* fd of the binary should be passed to the interpreter */ 55#define BINPRM_FLAGS_EXECFD_BIT 1 56#define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT) 57 58/* filename of the binary will be inaccessible after exec */ 59#define BINPRM_FLAGS_PATH_INACCESSIBLE_BIT 2 60#define BINPRM_FLAGS_PATH_INACCESSIBLE (1 << BINPRM_FLAGS_PATH_INACCESSIBLE_BIT) 61 62/* Function parameter for binfmt->coredump */ 63struct coredump_params { 64 const siginfo_t *siginfo; 65 struct pt_regs *regs; 66 struct file *file; 67 unsigned long limit; 68 unsigned long mm_flags; 69 loff_t written; 70 loff_t pos; 71}; 72 73/* 74 * This structure defines the functions that are used to load the binary formats that 75 * linux accepts. 76 */ 77struct linux_binfmt { 78 struct list_head lh; 79 struct module *module; 80 int (*load_binary)(struct linux_binprm *); 81 int (*load_shlib)(struct file *); 82 int (*core_dump)(struct coredump_params *cprm); 83 unsigned long min_coredump; /* minimal dump size */ 84}; 85 86extern void __register_binfmt(struct linux_binfmt *fmt, int insert); 87 88/* Registration of default binfmt handlers */ 89static inline void register_binfmt(struct linux_binfmt *fmt) 90{ 91 __register_binfmt(fmt, 0); 92} 93/* Same as above, but adds a new binfmt at the top of the list */ 94static inline void insert_binfmt(struct linux_binfmt *fmt) 95{ 96 __register_binfmt(fmt, 1); 97} 98 99extern void unregister_binfmt(struct linux_binfmt *); 100 101extern int prepare_binprm(struct linux_binprm *); 102extern int __must_check remove_arg_zero(struct linux_binprm *); 103extern int search_binary_handler(struct linux_binprm *); 104extern int flush_old_exec(struct linux_binprm * bprm); 105extern void setup_new_exec(struct linux_binprm * bprm); 106extern void would_dump(struct linux_binprm *, struct file *); 107 108extern int suid_dumpable; 109 110/* Stack area protections */ 111#define EXSTACK_DEFAULT 0 /* Whatever the arch defaults to */ 112#define EXSTACK_DISABLE_X 1 /* Disable executable stacks */ 113#define EXSTACK_ENABLE_X 2 /* Enable executable stacks */ 114 115extern int setup_arg_pages(struct linux_binprm * bprm, 116 unsigned long stack_top, 117 int executable_stack); 118extern int transfer_args_to_stack(struct linux_binprm *bprm, 119 unsigned long *sp_location); 120extern int bprm_change_interp(char *interp, struct linux_binprm *bprm); 121extern int copy_strings_kernel(int argc, const char *const *argv, 122 struct linux_binprm *bprm); 123extern int prepare_bprm_creds(struct linux_binprm *bprm); 124extern void install_exec_creds(struct linux_binprm *bprm); 125extern void set_binfmt(struct linux_binfmt *new); 126extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t); 127 128extern int do_execve(struct filename *, 129 const char __user * const __user *, 130 const char __user * const __user *); 131extern int do_execveat(int, struct filename *, 132 const char __user * const __user *, 133 const char __user * const __user *, 134 int); 135 136#endif /* _LINUX_BINFMTS_H */