From 21507c1cc4345e22b8c03ab8c3b731cab8fd0bd2 Mon Sep 17 00:00:00 2001 From: Andreas Schwab Date: Thu, 6 Nov 2008 00:49:00 +0000 Subject: [PATCH] --- yaml --- r: 118690 b: refs/heads/master c: 77eb50aefa5dd2337246dce8b66e18e837c1a8bc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/powerpc/kernel/signal_32.c | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 0984715d6735..a13d67f80c51 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ec5d7657f746c46b5fbb3dbec6d0f7d8b6b82961 +refs/heads/master: 77eb50aefa5dd2337246dce8b66e18e837c1a8bc diff --git a/trunk/arch/powerpc/kernel/signal_32.c b/trunk/arch/powerpc/kernel/signal_32.c index a6a43103655e..b13abf305996 100644 --- a/trunk/arch/powerpc/kernel/signal_32.c +++ b/trunk/arch/powerpc/kernel/signal_32.c @@ -941,9 +941,21 @@ long sys_swapcontext(struct ucontext __user *old_ctx, #ifdef CONFIG_PPC64 unsigned long new_msr = 0; - if (new_ctx && - get_user(new_msr, &new_ctx->uc_mcontext.mc_gregs[PT_MSR])) - return -EFAULT; + if (new_ctx) { + struct mcontext __user *mcp; + u32 cmcp; + + /* + * Get pointer to the real mcontext. No need for + * access_ok since we are dealing with compat + * pointers. + */ + if (__get_user(cmcp, &new_ctx->uc_regs)) + return -EFAULT; + mcp = (struct mcontext __user *)(u64)cmcp; + if (__get_user(new_msr, &mcp->mc_gregs[PT_MSR])) + return -EFAULT; + } /* * Check that the context is not smaller than the original * size (with VMX but without VSX)