int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
 {
        struct pt_regs regs;
+       int err;
 
        memset(®s, 0, sizeof(regs));
 
        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);