Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef _LINUX_BINFMTS_H 3 : #define _LINUX_BINFMTS_H 4 : 5 : #include <linux/sched.h> 6 : #include <linux/unistd.h> 7 : #include <asm/exec.h> 8 : #include <uapi/linux/binfmts.h> 9 : 10 : struct filename; 11 : struct coredump_params; 12 : 13 : #define CORENAME_MAX_SIZE 128 14 : 15 : /* 16 : * This structure is used to hold the arguments that are used when loading binaries. 17 : */ 18 : struct linux_binprm { 19 : #ifdef CONFIG_MMU 20 : struct vm_area_struct *vma; 21 : unsigned long vma_pages; 22 : #else 23 : # define MAX_ARG_PAGES 32 24 : struct page *page[MAX_ARG_PAGES]; 25 : #endif 26 : struct mm_struct *mm; 27 : unsigned long p; /* current top of mem */ 28 : unsigned long argmin; /* rlimit marker for copy_strings() */ 29 : unsigned int 30 : /* Should an execfd be passed to userspace? */ 31 : have_execfd:1, 32 : 33 : /* Use the creds of a script (see binfmt_misc) */ 34 : execfd_creds:1, 35 : /* 36 : * Set by bprm_creds_for_exec hook to indicate a 37 : * privilege-gaining exec has happened. Used to set 38 : * AT_SECURE auxv for glibc. 39 : */ 40 : secureexec:1, 41 : /* 42 : * Set when errors can no longer be returned to the 43 : * original userspace. 44 : */ 45 : point_of_no_return:1; 46 : #ifdef __alpha__ 47 : unsigned int taso:1; 48 : #endif 49 : struct file *executable; /* Executable to pass to the interpreter */ 50 : struct file *interpreter; 51 : struct file *file; 52 : struct cred *cred; /* new credentials */ 53 : int unsafe; /* how unsafe this exec is (mask of LSM_UNSAFE_*) */ 54 : unsigned int per_clear; /* bits to clear in current->personality */ 55 : int argc, envc; 56 : const char *filename; /* Name of binary as seen by procps */ 57 : const char *interp; /* Name of the binary really executed. Most 58 : of the time same as filename, but could be 59 : different for binfmt_{misc,script} */ 60 : const char *fdpath; /* generated filename for execveat */ 61 : unsigned interp_flags; 62 : int execfd; /* File descriptor of the executable */ 63 : unsigned long loader, exec; 64 : 65 : struct rlimit rlim_stack; /* Saved RLIMIT_STACK used during exec. */ 66 : 67 : char buf[BINPRM_BUF_SIZE]; 68 : } __randomize_layout; 69 : 70 : #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0 71 : #define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT) 72 : 73 : /* filename of the binary will be inaccessible after exec */ 74 : #define BINPRM_FLAGS_PATH_INACCESSIBLE_BIT 2 75 : #define BINPRM_FLAGS_PATH_INACCESSIBLE (1 << BINPRM_FLAGS_PATH_INACCESSIBLE_BIT) 76 : 77 : /* preserve argv0 for the interpreter */ 78 : #define BINPRM_FLAGS_PRESERVE_ARGV0_BIT 3 79 : #define BINPRM_FLAGS_PRESERVE_ARGV0 (1 << BINPRM_FLAGS_PRESERVE_ARGV0_BIT) 80 : 81 : /* 82 : * This structure defines the functions that are used to load the binary formats that 83 : * linux accepts. 84 : */ 85 : struct linux_binfmt { 86 : struct list_head lh; 87 : struct module *module; 88 : int (*load_binary)(struct linux_binprm *); 89 : int (*load_shlib)(struct file *); 90 : #ifdef CONFIG_COREDUMP 91 : int (*core_dump)(struct coredump_params *cprm); 92 : unsigned long min_coredump; /* minimal dump size */ 93 : #endif 94 : } __randomize_layout; 95 : 96 : extern void __register_binfmt(struct linux_binfmt *fmt, int insert); 97 : 98 : /* Registration of default binfmt handlers */ 99 : static inline void register_binfmt(struct linux_binfmt *fmt) 100 : { 101 2 : __register_binfmt(fmt, 0); 102 : } 103 : /* Same as above, but adds a new binfmt at the top of the list */ 104 : static inline void insert_binfmt(struct linux_binfmt *fmt) 105 : { 106 : __register_binfmt(fmt, 1); 107 : } 108 : 109 : extern void unregister_binfmt(struct linux_binfmt *); 110 : 111 : extern int __must_check remove_arg_zero(struct linux_binprm *); 112 : extern int begin_new_exec(struct linux_binprm * bprm); 113 : extern void setup_new_exec(struct linux_binprm * bprm); 114 : extern void finalize_exec(struct linux_binprm *bprm); 115 : extern void would_dump(struct linux_binprm *, struct file *); 116 : 117 : extern int suid_dumpable; 118 : 119 : /* Stack area protections */ 120 : #define EXSTACK_DEFAULT 0 /* Whatever the arch defaults to */ 121 : #define EXSTACK_DISABLE_X 1 /* Disable executable stacks */ 122 : #define EXSTACK_ENABLE_X 2 /* Enable executable stacks */ 123 : 124 : extern int setup_arg_pages(struct linux_binprm * bprm, 125 : unsigned long stack_top, 126 : int executable_stack); 127 : extern int transfer_args_to_stack(struct linux_binprm *bprm, 128 : unsigned long *sp_location); 129 : extern int bprm_change_interp(const char *interp, struct linux_binprm *bprm); 130 : int copy_string_kernel(const char *arg, struct linux_binprm *bprm); 131 : extern void set_binfmt(struct linux_binfmt *new); 132 : extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t); 133 : 134 : int kernel_execve(const char *filename, 135 : const char *const *argv, const char *const *envp); 136 : 137 : #endif /* _LINUX_BINFMTS_H */