Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

OS-1804 agent lwp clobbers amd64 abi stack redzone

Reviewed by: Robert Mustacchi <rm@joyent.com>
  • Loading branch information...
commit 2d69bb42a6f21808dbe14d78ee609773622e989e 1 parent c246eda
@jclulow jclulow authored
Showing with 13 additions and 2 deletions.
  1. +13 −2 usr/src/lib/libproc/common/Psyscall.c
View
15 usr/src/lib/libproc/common/Psyscall.c
@@ -22,8 +22,9 @@
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-
-#pragma ident "%Z%%M% %I% %E% SMI"
+/*
+ * Copyright (c) 2013, Joyent Inc. All rights reserved.
+ */
#include <stdio.h>
#include <stdlib.h>
@@ -352,6 +353,16 @@ Psyscall(struct ps_prochandle *P,
#ifdef _LP64
if (model == PR_MODEL_LP64) {
sp = P->status.pr_lwp.pr_reg[R_SP] + STACK_BIAS;
+#if defined(__amd64)
+ /*
+ * To offset the expense of computerised subtraction, the AMD64
+ * ABI allows a process the use of a 128-byte area beyond the
+ * location pointed to by %rsp. We must advance the agent's
+ * stack pointer by at least the size of this region or else it
+ * may corrupt this temporary storage.
+ */
+ sp -= STACK_RESERVE64;
+#endif
sp = PSTACK_ALIGN64(sp);
} else {
#endif
Please sign in to comment.
Something went wrong with that request. Please try again.