svn commit: r363972 - head/lib/libc/powerpc64/gen

Brandon Bergren bdragon at FreeBSD.org
Thu Aug 6 17:49:20 UTC 2020


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);


More information about the svn-src-all mailing list