arch: rename copy_thread_tls() back to copy_thread()

Now that HAVE_COPY_THREAD_TLS has been removed, rename copy_thread_tls()
back simply copy_thread(). It's a simpler name, and doesn't imply that only
tls is copied here. This finishes an outstanding chunk of internal process
creation work since we've added clone3().

Cc: linux-arch@vger.kernel.org
Acked-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>A
Acked-by: Stafford Horne <shorne@gmail.com>
Acked-by: Greentime Hu <green.hu@gmail.com>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>A
Reviewed-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
This commit is contained in:
Christian Brauner 2020-06-11 11:04:15 +02:00
parent 140c8180eb
commit 714acdbd1c
No known key found for this signature in database
GPG Key ID: 91C61BC06578DCA2
30 changed files with 59 additions and 66 deletions

View File

@ -233,7 +233,7 @@ release_thread(struct task_struct *dead_task)
/* /*
* Copy architecture-specific thread state * Copy architecture-specific thread state
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long kthread_arg, struct task_struct *p, unsigned long kthread_arg, struct task_struct *p,
unsigned long tls) unsigned long tls)
{ {

View File

@ -173,8 +173,9 @@ asmlinkage void ret_from_fork(void);
* | user_r25 | * | user_r25 |
* ------------------ <===== END of PAGE * ------------------ <===== END of PAGE
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long kthread_arg, struct task_struct *p, unsigned long tls) unsigned long kthread_arg, struct task_struct *p,
unsigned long tls)
{ {
struct pt_regs *c_regs; /* child's pt_regs */ struct pt_regs *c_regs; /* child's pt_regs */
unsigned long *childksp; /* to unwind out of __switch_to() */ unsigned long *childksp; /* to unwind out of __switch_to() */

View File

@ -225,8 +225,7 @@ void release_thread(struct task_struct *dead_task)
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
int int copy_thread(unsigned long clone_flags, unsigned long stack_start,
copy_thread_tls(unsigned long clone_flags, unsigned long stack_start,
unsigned long stk_sz, struct task_struct *p, unsigned long tls) unsigned long stk_sz, struct task_struct *p, unsigned long tls)
{ {
struct thread_info *thread = task_thread_info(p); struct thread_info *thread = task_thread_info(p);

View File

@ -375,7 +375,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
asmlinkage void ret_from_fork(void) asm("ret_from_fork"); asmlinkage void ret_from_fork(void) asm("ret_from_fork");
int copy_thread_tls(unsigned long clone_flags, unsigned long stack_start, int copy_thread(unsigned long clone_flags, unsigned long stack_start,
unsigned long stk_sz, struct task_struct *p, unsigned long tls) unsigned long stk_sz, struct task_struct *p, unsigned long tls)
{ {
struct pt_regs *childregs = task_pt_regs(p); struct pt_regs *childregs = task_pt_regs(p);

View File

@ -104,7 +104,7 @@ void start_thread(struct pt_regs *regs, unsigned int pc, unsigned long usp)
/* /*
* Copy a new thread context in its stack. * Copy a new thread context in its stack.
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long ustk_size, struct task_struct *p, unsigned long ustk_size, struct task_struct *p,
unsigned long tls) unsigned long tls)
{ {

View File

@ -40,7 +40,7 @@ unsigned long thread_saved_pc(struct task_struct *tsk)
return sw->r15; return sw->r15;
} }
int copy_thread_tls(unsigned long clone_flags, int copy_thread(unsigned long clone_flags,
unsigned long usp, unsigned long usp,
unsigned long kthread_arg, unsigned long kthread_arg,
struct task_struct *p, struct task_struct *p,

View File

@ -105,9 +105,8 @@ void flush_thread(void)
{ {
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long topstk, struct task_struct *p, unsigned long topstk, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
struct pt_regs *childregs; struct pt_regs *childregs;

View File

@ -50,8 +50,8 @@ void arch_cpu_idle(void)
/* /*
* Copy architecture-specific thread state * Copy architecture-specific thread state
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct thread_info *ti = task_thread_info(p); struct thread_info *ti = task_thread_info(p);
struct hexagon_switch_stack *ss; struct hexagon_switch_stack *ss;

View File

@ -311,7 +311,7 @@ ia64_load_extra (struct task_struct *task)
* <clone syscall> <some kernel call frames> * <clone syscall> <some kernel call frames>
* sys_clone : * sys_clone :
* _do_fork _do_fork * _do_fork _do_fork
* copy_thread_tls copy_thread_tls * copy_thread copy_thread
* *
* This means that the stack layout is as follows: * This means that the stack layout is as follows:
* *
@ -333,9 +333,8 @@ ia64_load_extra (struct task_struct *task)
* so there is nothing to worry about. * so there is nothing to worry about.
*/ */
int int
copy_thread_tls(unsigned long clone_flags, unsigned long user_stack_base, copy_thread(unsigned long clone_flags, unsigned long user_stack_base,
unsigned long user_stack_size, struct task_struct *p, unsigned long user_stack_size, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
extern char ia64_ret_from_clone; extern char ia64_ret_from_clone;
struct switch_stack *child_stack, *stack; struct switch_stack *child_stack, *stack;

View File

@ -138,9 +138,8 @@ asmlinkage int m68k_clone3(struct pt_regs *regs)
return sys_clone3((struct clone_args __user *)regs->d1, regs->d2); return sys_clone3((struct clone_args __user *)regs->d1, regs->d2);
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
struct fork_frame { struct fork_frame {
struct switch_stack sw; struct switch_stack sw;

View File

@ -54,8 +54,8 @@ void flush_thread(void)
{ {
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct pt_regs *childregs = task_pt_regs(p); struct pt_regs *childregs = task_pt_regs(p);
struct thread_info *ti = task_thread_info(p); struct thread_info *ti = task_thread_info(p);

View File

@ -119,8 +119,9 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
/* /*
* Copy architecture-specific thread state * Copy architecture-specific thread state
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long kthread_arg, struct task_struct *p, unsigned long tls) unsigned long kthread_arg, struct task_struct *p,
unsigned long tls)
{ {
struct thread_info *ti = task_thread_info(p); struct thread_info *ti = task_thread_info(p);
struct pt_regs *childregs, *regs = current_pt_regs(); struct pt_regs *childregs, *regs = current_pt_regs();

View File

@ -149,9 +149,8 @@ void flush_thread(void)
DEFINE_PER_CPU(struct task_struct *, __entry_task); DEFINE_PER_CPU(struct task_struct *, __entry_task);
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
int copy_thread_tls(unsigned long clone_flags, unsigned long stack_start, int copy_thread(unsigned long clone_flags, unsigned long stack_start,
unsigned long stk_sz, struct task_struct *p, unsigned long stk_sz, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
struct pt_regs *childregs = task_pt_regs(p); struct pt_regs *childregs = task_pt_regs(p);

View File

@ -100,8 +100,8 @@ void flush_thread(void)
{ {
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct pt_regs *childregs = task_pt_regs(p); struct pt_regs *childregs = task_pt_regs(p);
struct pt_regs *regs; struct pt_regs *regs;

View File

@ -116,7 +116,7 @@ void release_thread(struct task_struct *dead_task)
extern asmlinkage void ret_from_fork(void); extern asmlinkage void ret_from_fork(void);
/* /*
* copy_thread_tls * copy_thread
* @clone_flags: flags * @clone_flags: flags
* @usp: user stack pointer or fn for kernel thread * @usp: user stack pointer or fn for kernel thread
* @arg: arg to fn for kernel thread; always NULL for userspace thread * @arg: arg to fn for kernel thread; always NULL for userspace thread
@ -147,8 +147,8 @@ extern asmlinkage void ret_from_fork(void);
*/ */
int int
copy_thread_tls(unsigned long clone_flags, unsigned long usp, copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct pt_regs *userregs; struct pt_regs *userregs;
struct pt_regs *kregs; struct pt_regs *kregs;

View File

@ -208,7 +208,7 @@ arch_initcall(parisc_idle_init);
* Copy architecture-specific thread state * Copy architecture-specific thread state
*/ */
int int
copy_thread_tls(unsigned long clone_flags, unsigned long usp, copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long kthread_arg, struct task_struct *p, unsigned long tls) unsigned long kthread_arg, struct task_struct *p, unsigned long tls)
{ {
struct pt_regs *cregs = &(p->thread.regs); struct pt_regs *cregs = &(p->thread.regs);

View File

@ -1593,7 +1593,7 @@ static void setup_ksp_vsid(struct task_struct *p, unsigned long sp)
/* /*
* Copy architecture-specific thread state * Copy architecture-specific thread state
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp,
unsigned long kthread_arg, struct task_struct *p, unsigned long kthread_arg, struct task_struct *p,
unsigned long tls) unsigned long tls)
{ {

View File

@ -101,8 +101,8 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
return 0; return 0;
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct pt_regs *childregs = task_pt_regs(p); struct pt_regs *childregs = task_pt_regs(p);

View File

@ -80,7 +80,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
return 0; return 0;
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long new_stackp, int copy_thread(unsigned long clone_flags, unsigned long new_stackp,
unsigned long arg, struct task_struct *p, unsigned long tls) unsigned long arg, struct task_struct *p, unsigned long tls)
{ {
struct fake_frame struct fake_frame

View File

@ -115,8 +115,8 @@ EXPORT_SYMBOL(dump_fpu);
asmlinkage void ret_from_fork(void); asmlinkage void ret_from_fork(void);
asmlinkage void ret_from_kernel_thread(void); asmlinkage void ret_from_kernel_thread(void);
int copy_thread_tls(unsigned long clone_flags, unsigned long usp, int copy_thread(unsigned long clone_flags, unsigned long usp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct thread_info *ti = task_thread_info(p); struct thread_info *ti = task_thread_info(p);
struct pt_regs *childregs; struct pt_regs *childregs;

View File

@ -28,7 +28,7 @@ asmlinkage long sparc_fork(struct pt_regs *regs)
ret = _do_fork(&args); ret = _do_fork(&args);
/* If we get an error and potentially restart the system /* If we get an error and potentially restart the system
* call, we're screwed because copy_thread_tls() clobbered * call, we're screwed because copy_thread() clobbered
* the parent's %o1. So detect that case and restore it * the parent's %o1. So detect that case and restore it
* here. * here.
*/ */
@ -53,7 +53,7 @@ asmlinkage long sparc_vfork(struct pt_regs *regs)
ret = _do_fork(&args); ret = _do_fork(&args);
/* If we get an error and potentially restart the system /* If we get an error and potentially restart the system
* call, we're screwed because copy_thread_tls() clobbered * call, we're screwed because copy_thread() clobbered
* the parent's %o1. So detect that case and restore it * the parent's %o1. So detect that case and restore it
* here. * here.
*/ */
@ -99,7 +99,7 @@ asmlinkage long sparc_clone(struct pt_regs *regs)
ret = _do_fork(&args); ret = _do_fork(&args);
/* If we get an error and potentially restart the system /* If we get an error and potentially restart the system
* call, we're screwed because copy_thread_tls() clobbered * call, we're screwed because copy_thread() clobbered
* the parent's %o1. So detect that case and restore it * the parent's %o1. So detect that case and restore it
* here. * here.
*/ */

View File

@ -273,9 +273,8 @@ clone_stackframe(struct sparc_stackf __user *dst,
extern void ret_from_fork(void); extern void ret_from_fork(void);
extern void ret_from_kernel_thread(void); extern void ret_from_kernel_thread(void);
int copy_thread_tls(unsigned long clone_flags, unsigned long sp, int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg,
unsigned long arg, struct task_struct *p, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
struct thread_info *ti = task_thread_info(p); struct thread_info *ti = task_thread_info(p);
struct pt_regs *childregs, *regs = current_pt_regs(); struct pt_regs *childregs, *regs = current_pt_regs();

View File

@ -577,9 +577,8 @@ barf:
* Parent --> %o0 == childs pid, %o1 == 0 * Parent --> %o0 == childs pid, %o1 == 0
* Child --> %o0 == parents pid, %o1 == 1 * Child --> %o0 == parents pid, %o1 == 1
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long sp, int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg,
unsigned long arg, struct task_struct *p, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
struct thread_info *t = task_thread_info(p); struct thread_info *t = task_thread_info(p);
struct pt_regs *regs = current_pt_regs(); struct pt_regs *regs = current_pt_regs();

View File

@ -152,7 +152,7 @@ void fork_handler(void)
userspace(&current->thread.regs.regs, current_thread_info()->aux_fp_regs); userspace(&current->thread.regs.regs, current_thread_info()->aux_fp_regs);
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long sp, int copy_thread(unsigned long clone_flags, unsigned long sp,
unsigned long arg, struct task_struct * p, unsigned long tls) unsigned long arg, struct task_struct * p, unsigned long tls)
{ {
void (*handler)(void); void (*handler)(void);

View File

@ -219,9 +219,8 @@ void release_thread(struct task_struct *dead_task)
asmlinkage void ret_from_fork(void) __asm__("ret_from_fork"); asmlinkage void ret_from_fork(void) __asm__("ret_from_fork");
asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread"); asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
int copy_thread_tls(unsigned long clone_flags, unsigned long stack_start, int copy_thread(unsigned long clone_flags, unsigned long stack_start,
unsigned long stk_sz, struct task_struct *p, unsigned long stk_sz, struct task_struct *p, unsigned long tls)
unsigned long tls)
{ {
struct thread_info *thread = task_thread_info(p); struct thread_info *thread = task_thread_info(p);
struct pt_regs *childregs = task_pt_regs(p); struct pt_regs *childregs = task_pt_regs(p);

View File

@ -121,8 +121,8 @@ static int set_new_tls(struct task_struct *p, unsigned long tls)
return do_set_thread_area_64(p, ARCH_SET_FS, tls); return do_set_thread_area_64(p, ARCH_SET_FS, tls);
} }
int copy_thread_tls(unsigned long clone_flags, unsigned long sp, int copy_thread(unsigned long clone_flags, unsigned long sp, unsigned long arg,
unsigned long arg, struct task_struct *p, unsigned long tls) struct task_struct *p, unsigned long tls)
{ {
struct inactive_task_frame *frame; struct inactive_task_frame *frame;
struct fork_frame *fork_frame; struct fork_frame *fork_frame;

View File

@ -269,7 +269,7 @@ bool unwind_next_frame(struct unwind_state *state)
/* /*
* kthreads (other than the boot CPU's idle thread) have some * kthreads (other than the boot CPU's idle thread) have some
* partial regs at the end of their stack which were placed * partial regs at the end of their stack which were placed
* there by copy_thread_tls(). But the regs don't have any * there by copy_thread(). But the regs don't have any
* useful information, so we can skip them. * useful information, so we can skip them.
* *
* This user_mode() check is slightly broader than a PF_KTHREAD * This user_mode() check is slightly broader than a PF_KTHREAD

View File

@ -201,7 +201,7 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
* involved. Much simpler to just not copy those live frames across. * involved. Much simpler to just not copy those live frames across.
*/ */
int copy_thread_tls(unsigned long clone_flags, unsigned long usp_thread_fn, int copy_thread(unsigned long clone_flags, unsigned long usp_thread_fn,
unsigned long thread_fn_arg, struct task_struct *p, unsigned long thread_fn_arg, struct task_struct *p,
unsigned long tls) unsigned long tls)
{ {

View File

@ -65,7 +65,7 @@ extern void fork_init(void);
extern void release_task(struct task_struct * p); extern void release_task(struct task_struct * p);
extern int copy_thread_tls(unsigned long, unsigned long, unsigned long, extern int copy_thread(unsigned long, unsigned long, unsigned long,
struct task_struct *, unsigned long); struct task_struct *, unsigned long);
extern void flush_thread(void); extern void flush_thread(void);

View File

@ -2104,8 +2104,7 @@ static __latent_entropy struct task_struct *copy_process(
retval = copy_io(clone_flags, p); retval = copy_io(clone_flags, p);
if (retval) if (retval)
goto bad_fork_cleanup_namespaces; goto bad_fork_cleanup_namespaces;
retval = copy_thread_tls(clone_flags, args->stack, args->stack_size, p, retval = copy_thread(clone_flags, args->stack, args->stack_size, p, args->tls);
args->tls);
if (retval) if (retval)
goto bad_fork_cleanup_io; goto bad_fork_cleanup_io;