diff options
Diffstat (limited to 'arch/x86/kernel/process_32.c')
-rw-r--r-- | arch/x86/kernel/process_32.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index 53406461074f..3744cf63682c 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
@@ -445,7 +445,12 @@ void flush_thread(void) | |||
445 | { | 445 | { |
446 | struct task_struct *tsk = current; | 446 | struct task_struct *tsk = current; |
447 | 447 | ||
448 | memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8); | 448 | tsk->thread.debugreg0 = 0; |
449 | tsk->thread.debugreg1 = 0; | ||
450 | tsk->thread.debugreg2 = 0; | ||
451 | tsk->thread.debugreg3 = 0; | ||
452 | tsk->thread.debugreg6 = 0; | ||
453 | tsk->thread.debugreg7 = 0; | ||
449 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); | 454 | memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array)); |
450 | clear_tsk_thread_flag(tsk, TIF_DEBUG); | 455 | clear_tsk_thread_flag(tsk, TIF_DEBUG); |
451 | /* | 456 | /* |
@@ -522,7 +527,6 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp, | |||
522 | */ | 527 | */ |
523 | void dump_thread(struct pt_regs * regs, struct user * dump) | 528 | void dump_thread(struct pt_regs * regs, struct user * dump) |
524 | { | 529 | { |
525 | int i; | ||
526 | u16 gs; | 530 | u16 gs; |
527 | 531 | ||
528 | /* changed the size calculations - should hopefully work better. lbt */ | 532 | /* changed the size calculations - should hopefully work better. lbt */ |
@@ -533,8 +537,14 @@ void dump_thread(struct pt_regs * regs, struct user * dump) | |||
533 | dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT; | 537 | dump->u_dsize = ((unsigned long) (current->mm->brk + (PAGE_SIZE-1))) >> PAGE_SHIFT; |
534 | dump->u_dsize -= dump->u_tsize; | 538 | dump->u_dsize -= dump->u_tsize; |
535 | dump->u_ssize = 0; | 539 | dump->u_ssize = 0; |
536 | for (i = 0; i < 8; i++) | 540 | dump->u_debugreg[0] = current->thread.debugreg0; |
537 | dump->u_debugreg[i] = current->thread.debugreg[i]; | 541 | dump->u_debugreg[1] = current->thread.debugreg1; |
542 | dump->u_debugreg[2] = current->thread.debugreg2; | ||
543 | dump->u_debugreg[3] = current->thread.debugreg3; | ||
544 | dump->u_debugreg[4] = 0; | ||
545 | dump->u_debugreg[5] = 0; | ||
546 | dump->u_debugreg[6] = current->thread.debugreg6; | ||
547 | dump->u_debugreg[7] = current->thread.debugreg7; | ||
538 | 548 | ||
539 | if (dump->start_stack < TASK_SIZE) | 549 | if (dump->start_stack < TASK_SIZE) |
540 | dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT; | 550 | dump->u_ssize = ((unsigned long) (TASK_SIZE - dump->start_stack)) >> PAGE_SHIFT; |
@@ -612,13 +622,13 @@ __switch_to_xtra(struct task_struct *prev_p, struct task_struct *next_p, | |||
612 | wrmsr(MSR_IA32_DEBUGCTLMSR, next->debugctlmsr, 0); | 622 | wrmsr(MSR_IA32_DEBUGCTLMSR, next->debugctlmsr, 0); |
613 | 623 | ||
614 | if (test_tsk_thread_flag(next_p, TIF_DEBUG)) { | 624 | if (test_tsk_thread_flag(next_p, TIF_DEBUG)) { |
615 | set_debugreg(next->debugreg[0], 0); | 625 | set_debugreg(next->debugreg0, 0); |
616 | set_debugreg(next->debugreg[1], 1); | 626 | set_debugreg(next->debugreg1, 1); |
617 | set_debugreg(next->debugreg[2], 2); | 627 | set_debugreg(next->debugreg2, 2); |
618 | set_debugreg(next->debugreg[3], 3); | 628 | set_debugreg(next->debugreg3, 3); |
619 | /* no 4 and 5 */ | 629 | /* no 4 and 5 */ |
620 | set_debugreg(next->debugreg[6], 6); | 630 | set_debugreg(next->debugreg6, 6); |
621 | set_debugreg(next->debugreg[7], 7); | 631 | set_debugreg(next->debugreg7, 7); |
622 | } | 632 | } |
623 | 633 | ||
624 | #ifdef CONFIG_SECCOMP | 634 | #ifdef CONFIG_SECCOMP |
@@ -869,4 +879,3 @@ unsigned long arch_randomize_brk(struct mm_struct *mm) | |||
869 | unsigned long range_end = mm->brk + 0x02000000; | 879 | unsigned long range_end = mm->brk + 0x02000000; |
870 | return randomize_range(mm->brk, range_end, 0) ? : mm->brk; | 880 | return randomize_range(mm->brk, range_end, 0) ? : mm->brk; |
871 | } | 881 | } |
872 | |||