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

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

Version: ~ [ linux-5.13-rc1 ] ~ [ linux-5.12.2 ] ~ [ linux-5.11.19 ] ~ [ linux-5.10.35 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.117 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.190 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.232 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.268 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.268 ] ~ [ 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 #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 
  9 #define CORENAME_MAX_SIZE 128
 10 
 11 /*
 12  * This structure is used to hold the arguments that are used when loading binaries.
 13  */
 14 struct linux_binprm {
 15         char buf[BINPRM_BUF_SIZE];
 16 #ifdef CONFIG_MMU
 17         struct vm_area_struct *vma;
 18         unsigned long vma_pages;
 19 #else
 20 # define MAX_ARG_PAGES  32
 21         struct page *page[MAX_ARG_PAGES];
 22 #endif
 23         struct mm_struct *mm;
 24         unsigned long p; /* current top of mem */
 25         unsigned int
 26                 cred_prepared:1,/* true if creds already prepared (multiple
 27                                  * preps happen for interpreters) */
 28                 cap_effective:1;/* true if has elevated effective capabilities,
 29                                  * false if not; except for init which inherits
 30                                  * its parent's caps anyway */
 31 #ifdef __alpha__
 32         unsigned int taso:1;
 33 #endif
 34         unsigned int recursion_depth; /* only for search_binary_handler() */
 35         struct file * file;
 36         struct cred *cred;      /* new credentials */
 37         int unsafe;             /* how unsafe this exec is (mask of LSM_UNSAFE_*) */
 38         unsigned int per_clear; /* bits to clear in current->personality */
 39         int argc, envc;
 40         const char * filename;  /* Name of binary as seen by procps */
 41         const char * interp;    /* Name of the binary really executed. Most
 42                                    of the time same as filename, but could be
 43                                    different for binfmt_{misc,script} */
 44         unsigned interp_flags;
 45         unsigned interp_data;
 46         unsigned long loader, exec;
 47         char tcomm[TASK_COMM_LEN];
 48 };
 49 
 50 #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
 51 #define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT)
 52 
 53 /* fd of the binary should be passed to the interpreter */
 54 #define BINPRM_FLAGS_EXECFD_BIT 1
 55 #define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
 56 
 57 /* Function parameter for binfmt->coredump */
 58 struct coredump_params {
 59         siginfo_t *siginfo;
 60         struct pt_regs *regs;
 61         struct file *file;
 62         unsigned long limit;
 63         unsigned long mm_flags;
 64 };
 65 
 66 /*
 67  * This structure defines the functions that are used to load the binary formats that
 68  * linux accepts.
 69  */
 70 struct linux_binfmt {
 71         struct list_head lh;
 72         struct module *module;
 73         int (*load_binary)(struct linux_binprm *);
 74         int (*load_shlib)(struct file *);
 75         int (*core_dump)(struct coredump_params *cprm);
 76         unsigned long min_coredump;     /* minimal dump size */
 77 };
 78 
 79 extern void __register_binfmt(struct linux_binfmt *fmt, int insert);
 80 
 81 /* Registration of default binfmt handlers */
 82 static inline void register_binfmt(struct linux_binfmt *fmt)
 83 {
 84         __register_binfmt(fmt, 0);
 85 }
 86 /* Same as above, but adds a new binfmt at the top of the list */
 87 static inline void insert_binfmt(struct linux_binfmt *fmt)
 88 {
 89         __register_binfmt(fmt, 1);
 90 }
 91 
 92 extern void unregister_binfmt(struct linux_binfmt *);
 93 
 94 extern int prepare_binprm(struct linux_binprm *);
 95 extern int __must_check remove_arg_zero(struct linux_binprm *);
 96 extern int search_binary_handler(struct linux_binprm *);
 97 extern int flush_old_exec(struct linux_binprm * bprm);
 98 extern void setup_new_exec(struct linux_binprm * bprm);
 99 extern void would_dump(struct linux_binprm *, struct file *);
100 
101 extern int suid_dumpable;
102 
103 /* Stack area protections */
104 #define EXSTACK_DEFAULT   0     /* Whatever the arch defaults to */
105 #define EXSTACK_DISABLE_X 1     /* Disable executable stacks */
106 #define EXSTACK_ENABLE_X  2     /* Enable executable stacks */
107 
108 extern int setup_arg_pages(struct linux_binprm * bprm,
109                            unsigned long stack_top,
110                            int executable_stack);
111 extern int bprm_change_interp(char *interp, struct linux_binprm *bprm);
112 extern int copy_strings_kernel(int argc, const char *const *argv,
113                                struct linux_binprm *bprm);
114 extern int prepare_bprm_creds(struct linux_binprm *bprm);
115 extern void install_exec_creds(struct linux_binprm *bprm);
116 extern void set_binfmt(struct linux_binfmt *new);
117 extern void free_bprm(struct linux_binprm *);
118 extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t);
119 
120 #endif /* _LINUX_BINFMTS_H */
121 

~ [ 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