diff options
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/process_32.c | 15 | ||||
-rw-r--r-- | arch/x86/kernel/process_64.c | 15 |
2 files changed, 30 insertions, 0 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 2cd89b8a7050..9230ce060d09 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -512,6 +512,21 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, | |||
512 | return err; | 512 | return err; |
513 | } | 513 | } |
514 | 514 | ||
515 | void | ||
516 | start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) | ||
517 | { | ||
518 | __asm__("movl %0, %%gs" :: "r"(0)); | ||
519 | regs->fs = 0; | ||
520 | set_fs(USER_DS); | ||
521 | regs->ds = __USER_DS; | ||
522 | regs->es = __USER_DS; | ||
523 | regs->ss = __USER_DS; | ||
524 | regs->cs = __USER_CS; | ||
525 | regs->ip = new_ip; | ||
526 | regs->sp = new_sp; | ||
527 | } | ||
528 | EXPORT_SYMBOL_GPL(start_thread); | ||
529 | |||
515 | #ifdef CONFIG_SECCOMP | 530 | #ifdef CONFIG_SECCOMP |
516 | static void hard_disable_TSC(void) | 531 | static void hard_disable_TSC(void) |
517 | { | 532 | { |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index 46c4c546b499..1ffce14cff6e 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
@@ -528,6 +528,21 @@ out: | |||
528 | return err; | 528 | return err; |
529 | } | 529 | } |
530 | 530 | ||
531 | void | ||
532 | start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp) | ||
533 | { | ||
534 | asm volatile("movl %0, %%fs; movl %0, %%es; movl %0, %%ds" :: "r"(0)); | ||
535 | load_gs_index(0); | ||
536 | regs->ip = new_ip; | ||
537 | regs->sp = new_sp; | ||
538 | write_pda(oldrsp, new_sp); | ||
539 | regs->cs = __USER_CS; | ||
540 | regs->ss = __USER_DS; | ||
541 | regs->flags = 0x200; | ||
542 | set_fs(USER_DS); | ||
543 | } | ||
544 | EXPORT_SYMBOL_GPL(start_thread); | ||
545 | |||
531 | /* | 546 | /* |
532 | * This special macro can be used to load a debugging register | 547 | * This special macro can be used to load a debugging register |
533 | */ | 548 | */ |