diff options
author | Brian Gerst <brgerst@gmail.com> | 2009-12-09 19:01:53 -0500 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2009-12-09 19:28:34 -0500 |
commit | 11cf88bd0b8165b65aaabaee0977e9a3ad474ab7 (patch) | |
tree | 33e74a88baf24ee971282ded562b78db40749bb9 /arch/x86/kernel/process.c | |
parent | 27f59559d63375a4d59e7c720a439d9f0b47edad (diff) |
x86: Merge sys_execve
Change 32-bit sys_execve to PTREGSCALL3, and merge with 64-bit.
Signed-off-by: Brian Gerst <brgerst@gmail.com>
LKML-Reference: <1260403316-5679-4-git-send-email-brgerst@gmail.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/kernel/process.c')
-rw-r--r-- | arch/x86/kernel/process.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index 5e2ba634ea15..bb17bd9334fb 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c | |||
@@ -236,6 +236,32 @@ int sys_vfork(struct pt_regs *regs) | |||
236 | 236 | ||
237 | 237 | ||
238 | /* | 238 | /* |
239 | * sys_execve() executes a new program. | ||
240 | */ | ||
241 | long sys_execve(char __user *name, char __user * __user *argv, | ||
242 | char __user * __user *envp, struct pt_regs *regs) | ||
243 | { | ||
244 | long error; | ||
245 | char *filename; | ||
246 | |||
247 | filename = getname(name); | ||
248 | error = PTR_ERR(filename); | ||
249 | if (IS_ERR(filename)) | ||
250 | return error; | ||
251 | error = do_execve(filename, argv, envp, regs); | ||
252 | |||
253 | #ifdef CONFIG_X86_32 | ||
254 | if (error == 0) { | ||
255 | /* Make sure we don't return using sysenter.. */ | ||
256 | set_thread_flag(TIF_IRET); | ||
257 | } | ||
258 | #endif | ||
259 | |||
260 | putname(filename); | ||
261 | return error; | ||
262 | } | ||
263 | |||
264 | /* | ||
239 | * Idle related variables and functions | 265 | * Idle related variables and functions |
240 | */ | 266 | */ |
241 | unsigned long boot_option_idle_override = 0; | 267 | unsigned long boot_option_idle_override = 0; |