Author: bdragon
Date: Thu Aug  6 17:49:19 2020
New Revision: 363972
URL: https://svnweb.freebsd.org/changeset/base/363972

Log:
  [POWERPC] Fix ppc64 makecontext() parameter overflow handling.
  
  On ELFv2, the overflow parameters in the stack frame are at a different offset
  from sp than ELFv1. Adjust code to use the correct offset in all cases.
  
  This had resulted in argv[8] and up being copied to the incorrect address
  in the new context's initial stack frame.
  
  This is not necessarily the only bug in this function, I need to do a full
  review still and ensure the rest of the math is sane for ELFv2 stack frames.
  
  Reported by:  pherde (Probably. My notes are a bit unclear.)
  Reviewed by:  jhibbits (in irc)
  Sponsored by: Tag1 Consulting, Inc.

Modified:
  head/lib/libc/powerpc64/gen/makecontext.c

Modified: head/lib/libc/powerpc64/gen/makecontext.c
==============================================================================
--- head/lib/libc/powerpc64/gen/makecontext.c   Thu Aug  6 16:44:24 2020        
(r363971)
+++ head/lib/libc/powerpc64/gen/makecontext.c   Thu Aug  6 17:49:19 2020        
(r363972)
@@ -102,7 +102,11 @@ __makecontext(ucontext_t *ucp, void (*start)(void), in
                uint64_t *argp;
 
                /* Skip past frame pointer and saved LR */
+#if !defined(_CALL_ELF) || _CALL_ELF == 1
                argp = (uint64_t *)sp + 6;
+#else
+               argp = (uint64_t *)sp + 4;
+#endif
 
                for (i = 0; i < stackargs; i++)
                        *argp++ = va_arg(ap, uint64_t);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to