diff options
| author | Jeff Garzik <jeff@garzik.org> | 2006-10-05 21:03:43 -0400 |
|---|---|---|
| committer | Jeff Garzik <jeff@garzik.org> | 2006-10-05 21:03:43 -0400 |
| commit | 4ad99f15c6a3cadf36928c399459ea4fdb3d49f9 (patch) | |
| tree | d0536e4da737900fa27b235f175a3d179d692200 /arch/i386/kernel/process.c | |
| parent | 46767aeba58ca9357a2309765201bad38d8f5e9b (diff) | |
| parent | 44aefd2706bb6f5b65ba2c38cd89e7609e2b43d3 (diff) | |
Merge branch 'master' into upstream-fixes
Diffstat (limited to 'arch/i386/kernel/process.c')
| -rw-r--r-- | arch/i386/kernel/process.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/i386/kernel/process.c b/arch/i386/kernel/process.c index dad02a960e0..b0a07801d9d 100644 --- a/arch/i386/kernel/process.c +++ b/arch/i386/kernel/process.c @@ -328,6 +328,7 @@ extern void kernel_thread_helper(void); int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) { struct pt_regs regs; + int err; memset(®s, 0, sizeof(regs)); @@ -342,7 +343,10 @@ int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) regs.eflags = X86_EFLAGS_IF | X86_EFLAGS_SF | X86_EFLAGS_PF | 0x2; /* Ok, create the new process.. */ - return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); + err = do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL); + if (err == 0) /* terminate kernel stack */ + task_pt_regs(current)->eip = 0; + return err; } EXPORT_SYMBOL(kernel_thread); |
