diff options
Diffstat (limited to 'arch/powerpc/kernel/signal_32.c')
-rw-r--r-- | arch/powerpc/kernel/signal_32.c | 19 |
1 files changed, 4 insertions, 15 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index bd837b5dbf06..d7a4e814974d 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -151,10 +151,7 @@ static inline int save_general_regs(struct pt_regs *regs, | |||
151 | elf_greg_t64 *gregs = (elf_greg_t64 *)regs; | 151 | elf_greg_t64 *gregs = (elf_greg_t64 *)regs; |
152 | int i; | 152 | int i; |
153 | 153 | ||
154 | if (!FULL_REGS(regs)) { | 154 | WARN_ON(!FULL_REGS(regs)); |
155 | set_thread_flag(TIF_SAVE_NVGPRS); | ||
156 | current_thread_info()->nvgprs_frame = frame->mc_gregs; | ||
157 | } | ||
158 | 155 | ||
159 | for (i = 0; i <= PT_RESULT; i ++) { | 156 | for (i = 0; i <= PT_RESULT; i ++) { |
160 | if (i == 14 && !FULL_REGS(regs)) | 157 | if (i == 14 && !FULL_REGS(regs)) |
@@ -215,15 +212,7 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka, | |||
215 | static inline int save_general_regs(struct pt_regs *regs, | 212 | static inline int save_general_regs(struct pt_regs *regs, |
216 | struct mcontext __user *frame) | 213 | struct mcontext __user *frame) |
217 | { | 214 | { |
218 | if (!FULL_REGS(regs)) { | 215 | WARN_ON(!FULL_REGS(regs)); |
219 | /* Zero out the unsaved GPRs to avoid information | ||
220 | leak, and set TIF_SAVE_NVGPRS to ensure that the | ||
221 | registers do actually get saved later. */ | ||
222 | memset(®s->gpr[14], 0, 18 * sizeof(unsigned long)); | ||
223 | current_thread_info()->nvgprs_frame = &frame->mc_gregs; | ||
224 | set_thread_flag(TIF_SAVE_NVGPRS); | ||
225 | } | ||
226 | |||
227 | return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE); | 216 | return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE); |
228 | } | 217 | } |
229 | 218 | ||
@@ -826,8 +815,8 @@ static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int | |||
826 | } | 815 | } |
827 | 816 | ||
828 | long sys_swapcontext(struct ucontext __user *old_ctx, | 817 | long sys_swapcontext(struct ucontext __user *old_ctx, |
829 | struct ucontext __user *new_ctx, | 818 | struct ucontext __user *new_ctx, |
830 | int ctx_size, int r6, int r7, int r8, struct pt_regs *regs) | 819 | int ctx_size, int r6, int r7, int r8, struct pt_regs *regs) |
831 | { | 820 | { |
832 | unsigned char tmp; | 821 | unsigned char tmp; |
833 | 822 | ||