hc
2023-12-08 01573e231f18eb2d99162747186f59511f56b64d
kernel/include/linux/binfmts.h
....@@ -15,7 +15,6 @@
1515 * This structure is used to hold the arguments that are used when loading binaries.
1616 */
1717 struct linux_binprm {
18
- char buf[BINPRM_BUF_SIZE];
1918 #ifdef CONFIG_MMU
2019 struct vm_area_struct *vma;
2120 unsigned long vma_pages;
....@@ -25,52 +24,50 @@
2524 #endif
2625 struct mm_struct *mm;
2726 unsigned long p; /* current top of mem */
27
+ unsigned long argmin; /* rlimit marker for copy_strings() */
2828 unsigned int
29
+ /* Should an execfd be passed to userspace? */
30
+ have_execfd:1,
31
+
32
+ /* Use the creds of a script (see binfmt_misc) */
33
+ execfd_creds:1,
2934 /*
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).
35
+ * Set by bprm_creds_for_exec hook to indicate a
36
+ * privilege-gaining exec has happened. Used to set
37
+ * AT_SECURE auxv for glibc.
3338 */
34
- called_set_creds:1,
39
+ secureexec:1,
3540 /*
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.
41
+ * Set when errors can no longer be returned to the
42
+ * original userspace.
4043 */
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;
44
+ point_of_no_return:1;
4845 #ifdef __alpha__
4946 unsigned int taso:1;
5047 #endif
51
- unsigned int recursion_depth; /* only for search_binary_handler() */
52
- struct file * file;
48
+ struct file *executable; /* Executable to pass to the interpreter */
49
+ struct file *interpreter;
50
+ struct file *file;
5351 struct cred *cred; /* new credentials */
5452 int unsafe; /* how unsafe this exec is (mask of LSM_UNSAFE_*) */
5553 unsigned int per_clear; /* bits to clear in current->personality */
5654 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
55
+ const char *filename; /* Name of binary as seen by procps */
56
+ const char *interp; /* Name of the binary really executed. Most
5957 of the time same as filename, but could be
6058 different for binfmt_{misc,script} */
59
+ const char *fdpath; /* generated filename for execveat */
6160 unsigned interp_flags;
62
- unsigned interp_data;
61
+ int execfd; /* File descriptor of the executable */
6362 unsigned long loader, exec;
6463
6564 struct rlimit rlim_stack; /* Saved RLIMIT_STACK used during exec. */
65
+
66
+ char buf[BINPRM_BUF_SIZE];
6667 } __randomize_layout;
6768
6869 #define BINPRM_FLAGS_ENFORCE_NONDUMP_BIT 0
6970 #define BINPRM_FLAGS_ENFORCE_NONDUMP (1 << BINPRM_FLAGS_ENFORCE_NONDUMP_BIT)
70
-
71
-/* fd of the binary should be passed to the interpreter */
72
-#define BINPRM_FLAGS_EXECFD_BIT 1
73
-#define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
7471
7572 /* filename of the binary will be inaccessible after exec */
7673 #define BINPRM_FLAGS_PATH_INACCESSIBLE_BIT 2
....@@ -78,7 +75,7 @@
7875
7976 /* Function parameter for binfmt->coredump */
8077 struct coredump_params {
81
- const siginfo_t *siginfo;
78
+ const kernel_siginfo_t *siginfo;
8279 struct pt_regs *regs;
8380 struct file *file;
8481 unsigned long limit;
....@@ -115,10 +112,8 @@
115112
116113 extern void unregister_binfmt(struct linux_binfmt *);
117114
118
-extern int prepare_binprm(struct linux_binprm *);
119115 extern int __must_check remove_arg_zero(struct linux_binprm *);
120
-extern int search_binary_handler(struct linux_binprm *);
121
-extern int flush_old_exec(struct linux_binprm * bprm);
116
+extern int begin_new_exec(struct linux_binprm * bprm);
122117 extern void setup_new_exec(struct linux_binprm * bprm);
123118 extern void finalize_exec(struct linux_binprm *bprm);
124119 extern void would_dump(struct linux_binprm *, struct file *);
....@@ -136,20 +131,11 @@
136131 extern int transfer_args_to_stack(struct linux_binprm *bprm,
137132 unsigned long *sp_location);
138133 extern int bprm_change_interp(const char *interp, struct linux_binprm *bprm);
139
-extern int copy_strings_kernel(int argc, const char *const *argv,
140
- struct linux_binprm *bprm);
141
-extern int prepare_bprm_creds(struct linux_binprm *bprm);
142
-extern void install_exec_creds(struct linux_binprm *bprm);
134
+int copy_string_kernel(const char *arg, struct linux_binprm *bprm);
143135 extern void set_binfmt(struct linux_binfmt *new);
144136 extern ssize_t read_code(struct file *, unsigned long, loff_t, size_t);
145137
146
-extern int do_execve(struct filename *,
147
- const char __user * const __user *,
148
- const char __user * const __user *);
149
-extern int do_execveat(int, struct filename *,
150
- const char __user * const __user *,
151
- const char __user * const __user *,
152
- int);
153
-int do_execve_file(struct file *file, void *__argv, void *__envp);
138
+int kernel_execve(const char *filename,
139
+ const char *const *argv, const char *const *envp);
154140
155141 #endif /* _LINUX_BINFMTS_H */