diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
| -rw-r--r-- | arch/powerpc/kernel/process.c | 33 |
1 files changed, 7 insertions, 26 deletions
diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 4ec605521504..703100d5e458 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -868,11 +868,6 @@ int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2, | |||
| 868 | flush_spe_to_thread(current); | 868 | flush_spe_to_thread(current); |
| 869 | error = do_execve(filename, (char __user * __user *) a1, | 869 | error = do_execve(filename, (char __user * __user *) a1, |
| 870 | (char __user * __user *) a2, regs); | 870 | (char __user * __user *) a2, regs); |
| 871 | if (error == 0) { | ||
| 872 | task_lock(current); | ||
| 873 | current->ptrace &= ~PT_DTRACE; | ||
| 874 | task_unlock(current); | ||
| 875 | } | ||
| 876 | putname(filename); | 871 | putname(filename); |
| 877 | out: | 872 | out: |
| 878 | return error; | 873 | return error; |
| @@ -919,20 +914,6 @@ int validate_sp(unsigned long sp, struct task_struct *p, | |||
| 919 | return valid_irq_stack(sp, p, nbytes); | 914 | return valid_irq_stack(sp, p, nbytes); |
| 920 | } | 915 | } |
| 921 | 916 | ||
| 922 | #ifdef CONFIG_PPC64 | ||
| 923 | #define MIN_STACK_FRAME 112 /* same as STACK_FRAME_OVERHEAD, in fact */ | ||
| 924 | #define FRAME_LR_SAVE 2 | ||
| 925 | #define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288) | ||
| 926 | #define REGS_MARKER 0x7265677368657265ul | ||
| 927 | #define FRAME_MARKER 12 | ||
| 928 | #else | ||
| 929 | #define MIN_STACK_FRAME 16 | ||
| 930 | #define FRAME_LR_SAVE 1 | ||
| 931 | #define INT_FRAME_SIZE (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD) | ||
| 932 | #define REGS_MARKER 0x72656773ul | ||
| 933 | #define FRAME_MARKER 2 | ||
| 934 | #endif | ||
| 935 | |||
| 936 | EXPORT_SYMBOL(validate_sp); | 917 | EXPORT_SYMBOL(validate_sp); |
| 937 | 918 | ||
| 938 | unsigned long get_wchan(struct task_struct *p) | 919 | unsigned long get_wchan(struct task_struct *p) |
| @@ -944,15 +925,15 @@ unsigned long get_wchan(struct task_struct *p) | |||
| 944 | return 0; | 925 | return 0; |
| 945 | 926 | ||
| 946 | sp = p->thread.ksp; | 927 | sp = p->thread.ksp; |
| 947 | if (!validate_sp(sp, p, MIN_STACK_FRAME)) | 928 | if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD)) |
| 948 | return 0; | 929 | return 0; |
| 949 | 930 | ||
| 950 | do { | 931 | do { |
| 951 | sp = *(unsigned long *)sp; | 932 | sp = *(unsigned long *)sp; |
| 952 | if (!validate_sp(sp, p, MIN_STACK_FRAME)) | 933 | if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD)) |
| 953 | return 0; | 934 | return 0; |
| 954 | if (count > 0) { | 935 | if (count > 0) { |
| 955 | ip = ((unsigned long *)sp)[FRAME_LR_SAVE]; | 936 | ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE]; |
| 956 | if (!in_sched_functions(ip)) | 937 | if (!in_sched_functions(ip)) |
| 957 | return ip; | 938 | return ip; |
| 958 | } | 939 | } |
| @@ -981,12 +962,12 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) | |||
| 981 | lr = 0; | 962 | lr = 0; |
| 982 | printk("Call Trace:\n"); | 963 | printk("Call Trace:\n"); |
| 983 | do { | 964 | do { |
| 984 | if (!validate_sp(sp, tsk, MIN_STACK_FRAME)) | 965 | if (!validate_sp(sp, tsk, STACK_FRAME_OVERHEAD)) |
| 985 | return; | 966 | return; |
| 986 | 967 | ||
| 987 | stack = (unsigned long *) sp; | 968 | stack = (unsigned long *) sp; |
| 988 | newsp = stack[0]; | 969 | newsp = stack[0]; |
| 989 | ip = stack[FRAME_LR_SAVE]; | 970 | ip = stack[STACK_FRAME_LR_SAVE]; |
| 990 | if (!firstframe || ip != lr) { | 971 | if (!firstframe || ip != lr) { |
| 991 | printk("["REG"] ["REG"] ", sp, ip); | 972 | printk("["REG"] ["REG"] ", sp, ip); |
| 992 | print_symbol("%s", ip); | 973 | print_symbol("%s", ip); |
| @@ -1000,8 +981,8 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) | |||
| 1000 | * See if this is an exception frame. | 981 | * See if this is an exception frame. |
| 1001 | * We look for the "regshere" marker in the current frame. | 982 | * We look for the "regshere" marker in the current frame. |
| 1002 | */ | 983 | */ |
| 1003 | if (validate_sp(sp, tsk, INT_FRAME_SIZE) | 984 | if (validate_sp(sp, tsk, STACK_INT_FRAME_SIZE) |
| 1004 | && stack[FRAME_MARKER] == REGS_MARKER) { | 985 | && stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) { |
| 1005 | struct pt_regs *regs = (struct pt_regs *) | 986 | struct pt_regs *regs = (struct pt_regs *) |
| 1006 | (sp + STACK_FRAME_OVERHEAD); | 987 | (sp + STACK_FRAME_OVERHEAD); |
| 1007 | printk("--- Exception: %lx", regs->trap); | 988 | printk("--- Exception: %lx", regs->trap); |
