Le 28/02/2017 à 02:09, David Gibson a écrit : > On Wed, Feb 01, 2017 at 09:43:57PM +0100, Laurent Vivier wrote: >> Le 31/01/2017 à 23:05, Jose Ricardo Ziviani a écrit : >>> A segfault is noticed when an emulated program uses any of ucontext >>> regs fields. Risu detected this issue in the following operation when >>> handling a signal: >>> ucontext_t *uc = (ucontext_t*)uc; >>> uc->uc_mcontext.regs->nip += 4; >>> >>> but this works fine: >>> uc->uc_mcontext.gp_regs[PT_NIP] += 4; >>> >>> This patch set regs to a valid location as well as other sigcontext >>> fields. >>> >>> Signed-off-by: Jose Ricardo Ziviani <[email protected]> >>> --- >>> linux-user/signal.c | 5 +++++ >>> 1 file changed, 5 insertions(+) >>> >>> diff --git a/linux-user/signal.c b/linux-user/signal.c >>> index 5064de0..8209539 100644 >>> --- a/linux-user/signal.c >>> +++ b/linux-user/signal.c >>> @@ -5155,6 +5155,7 @@ static void setup_rt_frame(int sig, struct >>> target_sigaction *ka, >>> target_ulong rt_sf_addr, newsp = 0; >>> int i, err = 0; >>> #if defined(TARGET_PPC64) >>> + struct target_sigcontext *sc = 0; >>> struct image_info *image = ((TaskState *)thread_cpu->opaque)->info; >>> #endif >>> >>> @@ -5183,6 +5184,10 @@ static void setup_rt_frame(int sig, struct >>> target_sigaction *ka, >>> #if defined(TARGET_PPC64) >>> mctx = &rt_sf->uc.tuc_sigcontext.mcontext; >>> trampptr = &rt_sf->trampoline[0]; >>> + >>> + sc = &rt_sf->uc.tuc_sigcontext; >>> + __put_user(h2g(mctx), &sc->regs); >>> + __put_user(sig, &sc->signal); >>> #else >>> mctx = &rt_sf->uc.tuc_mcontext; >>> trampptr = (uint32_t *)&rt_sf->uc.tuc_mcontext.tramp; >>> >> >> Reviewed-by: Laurent Vivier <[email protected]> >> >> This is correct, but QEMU and kernel implementation are really >> different. >
Hi David, > Laurent, I'm a bit clear on what the upshot is here. > > Should I merge the patch above? I've already included this patch in a linux-user pull request a couple of weeks ago, and it is now in the master. So you have nothing to do :) Thanks, Laurent
signature.asc
Description: OpenPGP digital signature
