Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fa4b8f84 authored by Brian Gerst's avatar Brian Gerst Committed by H. Peter Anvin
Browse files

x86, 64-bit: Use user_mode() to determine new stack pointer in copy_thread()



Use user_mode() instead of a magic value for sp to determine when returning
to kernel mode.

Signed-off-by: default avatarBrian Gerst <brgerst@gmail.com>
LKML-Reference: <1260380084-3707-3-git-send-email-brgerst@gmail.com>
Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
parent 3bd95dfb
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -254,7 +254,7 @@ int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
	regs.flags = X86_EFLAGS_IF;

	/* Ok, create the new process.. */
	return do_fork(flags | CLONE_VM | CLONE_UNTRACED, ~0UL, &regs, 0, NULL, NULL);
	return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, &regs, 0, NULL, NULL);
}
EXPORT_SYMBOL(kernel_thread);

@@ -312,8 +312,9 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
	*childregs = *regs;

	childregs->ax = 0;
	if (user_mode(regs))
		childregs->sp = sp;
	if (sp == ~0UL)
	else
		childregs->sp = (unsigned long)childregs;

	p->thread.sp = (unsigned long) childregs;