From ca67e6c1b1dee70bdc18346722e1f7366e3c314c Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Thu, 24 Nov 2005 12:51:40 +0000 Subject: [PATCH] --- yaml --- r: 17143 b: refs/heads/master c: 9687c587596b54a77f08620595f5686ea35eed97 h: refs/heads/master i: 17141: 19294fe4dd5affae1d348c0b80601af87a9a636e 17139: 96eb166327d9792689f189cd0197fa8a950765de 17135: fb19100d44833a4754906e96e774abe280ad9629 v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kernel/signal_32.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c1895516c56b..4a8b4ab230cc 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 31df1678d7732b94178a6e457ed6666e4431212f +refs/heads/master: 9687c587596b54a77f08620595f5686ea35eed97 diff --git a/trunk/arch/powerpc/kernel/signal_32.c b/trunk/arch/powerpc/kernel/signal_32.c index c9d02751127f..d3f0b6d452fb 100644 --- a/trunk/arch/powerpc/kernel/signal_32.c +++ b/trunk/arch/powerpc/kernel/signal_32.c @@ -219,6 +219,15 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka, static inline int save_general_regs(struct pt_regs *regs, struct mcontext __user *frame) { + if (!FULL_REGS(regs)) { + /* Zero out the unsaved GPRs to avoid information + leak, and set TIF_SAVE_NVGPRS to ensure that the + registers do actually get saved later. */ + memset(®s->gpr[14], 0, 18 * sizeof(unsigned long)); + current_thread_info()->nvgprs_frame = &frame->mc_gregs; + set_thread_flag(TIF_SAVE_NVGPRS); + } + return __copy_to_user(&frame->mc_gregs, regs, GP_REGS_SIZE); }