~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/binfmts.h

Version: ~ [ linux-5.14-rc1 ] ~ [ linux-5.13.1 ] ~ [ linux-5.12.16 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.49 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.131 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.197 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.239 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.275 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.275 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 
 12 #define CORENAME_MAX_SIZE 128
 13 
 14 /*
 15  * This structure is used to hold the arguments that are used when loading binaries.
 16  */
 17 struct linux_binprm {
 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 long argmin; /* rlimit marker for copy_strings() */
 28         unsigned int
 29                 /*
 30                  * True after the bprm_set_creds hook has been called once
 31                  * (multiple calls can be made via prepare_binprm() for
 32                  * binfmt_script/misc).
 33                  */
 34                 called_set_creds:1,
 35                 /*
 36                  * True if most recent call to the commoncaps bprm_set_creds
 37                  * hook (due to multiple prepare_binprm() calls from the
 38                  * binfmt_script/misc handlers) resulted in elevated
 39                  * privileges.
 40                  */
 41                 cap_elevated:1,
 42                 /*
 43                  * Set by bprm_set_creds hook to indicate a privilege-gaining
 44                  * exec has happened. Used to sanitize execution environment
 45                  * and to set AT_SECURE auxv for glibc.
 46                  */
 47                 secureexec:1;
 48 #ifdef __alpha__
 49         unsigned int taso:1;
 50 #endif
 51         unsigned int recursion_depth; /* only for search_binary_handler() */
 52         struct file * file;
 53         struct cred *cred;      /* new credentials */
 54         int unsafe;             /* how unsafe this exec is (mask of LSM_UNSAFE_*) */
 55         unsigned int per_clear; /* bits to clear in current->personality */
 56         int argc, envc;
 57         const char * filename;  /* Name of binary as seen by procps */
 58         const char * interp;    /* Name of the binary really executed. Most
 59                                    of the time same as filename, but could be
 60                                    different for binfmt_{misc,script} */
 61         unsigned interp_flags;
 62         unsigned interp_data;
 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 /* fd of the binary should be passed to the interpreter */
 74 #define BINPRM_FLAGS_EXECFD_BIT 1
 75 #define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
 76 
 77 /* filename of the binary will be inaccessible after exec */
 78 #define BINPRM_FLAGS_PATH_INACCESSIBLE_BIT 2
 79 #define BINPRM_FLAGS_PATH_INACCESSIBLE (1 << BINPRM_FLAGS_PATH_INACCESSIBLE_BIT)
 80 
 81 /* Function parameter for binfmt->coredump */
 82 struct coredump_params {
 83         const kernel_siginfo_t *siginfo;
 84         struct pt_regs *regs;
 85         struct file *file;
 86         unsigned long limit;
 87         unsigned long mm_flags;
 88         loff_t written;
 89         loff_t pos;
 90 };
 91 
 92 /*
 93  * This structure defines the functions that are used to load the binary formats that
 94  * linux accepts.
 95  */
 96 struct linux_binfmt {
 97         struct list_head lh;
 98         struct module *module;
 99         int (*load_binary)(struct linux_binprm *);
100         int (*load_shlib)(struct file *);
101         int (*core_dump)(struct coredump_params *cprm);
102         unsigned long min_coredump;     /* minimal dump size */
103 } __randomize_layout;
104 
105 extern void __register_binfmt(struct linux_binfmt *fmt, int insert);
106 
107 /* Registration of default binfmt handlers */
108 static inline void register_binfmt(struct linux_binfmt *fmt)
109 {
110         __register_binfmt(fmt, 0);
111 }
112 /* Same as above, but adds a new binfmt at the top of the list */
113 static inline void insert_binfmt(struct linux_binfmt *fmt)
114 {
115         __register_binfmt(fmt, 1);
116 }
117 
118 extern void unregister_binfmt(struct linux_binfmt *);
119 
120 extern int prepare_binprm(struct linux_binprm *);
121 extern int __must_check remove_arg_zero(struct linux_binprm *);
122 extern int search_binary_handler(struct linux_binprm *);
123 extern int flush_old_exec(struct linux_binprm * bprm);
124 extern void setup_new_exec(struct linux_binprm * bprm);
125 extern void finalize_exec(struct linux_binprm *bprm);
126 extern void would_dump(struct linux_binprm *, struct file *);
127 
128 extern int suid_dumpable;
129 
130 /* Stack area protections */
131 #define EXSTACK_DEFAULT   0     /* Whatever the arch defaults to */
132 #define EXSTACK_DISABLE_X 1     /* Disable executable stacks */
133 #define EXSTACK_ENABLE_X  2     /* Enable executable stacks */
134 
135 extern int setup_arg_pages(struct linux_binprm * bprm,
136                            unsigned long stack_top,
137                            int executable_stack);
138 extern int transfer_args_to_stack(struct linux_binprm *bprm,
139                                   unsigned long *sp_location);
140 extern int bprm_change_interp(const char *interp, struct linux_binprm *bprm);
141 extern int copy_strings_kernel(int argc, const char *const *argv,
142                                struct linux_binprm *bprm);
143 extern void install_exec_creds(struct linux_binprm *bprm);
144 extern void set_binfmt(struct linux_binfmt *new);
145 extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t);
146 
147 extern int do_execve(struct filename *,
148                      const char __user * const __user *,
149                      const char __user * const __user *);
150 extern int do_execveat(int, struct filename *,
151                        const char __user * const __user *,
152                        const char __user * const __user *,
153                        int);
154 int do_execve_file(struct file *file, void *__argv, void *__envp);
155 
156 #endif /* _LINUX_BINFMTS_H */
157 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp