From 39d8fc1edc8fa360f5275aae446e60a5dab2af74 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 31 Mar 2021 13:10:21 +0300 Subject: [PATCH] Changed PowerPC CPU registers used by Zend VM to work around GCC bug. Old registers (r28/r29) might be clobbered by _restgpr routine used for return from C function compiled with -Os. --- NEWS | 5 +++++ Zend/zend_execute.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/NEWS b/NEWS index 2009bc8e7be..c07ff6466d5 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,11 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2021, PHP 7.4.18 +- Core: + . Changed PowerPC CPU registers used by Zend VM to work around GCC bug. + Old registers (r28/r29) might be clobbered by _restgpr routine used for + return from C function compiled with -Os. (Dmitry) + - DOM: . Fixed bug #66783 (UAF when appending DOMDocument to element). (cmb) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 90ffa5afb69..fcbcec268b1 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -51,11 +51,11 @@ # define ZEND_VM_FP_GLOBAL_REG "%r14" # define ZEND_VM_IP_GLOBAL_REG "%r15" # elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__powerpc64__) -# define ZEND_VM_FP_GLOBAL_REG "r28" -# define ZEND_VM_IP_GLOBAL_REG "r29" +# define ZEND_VM_FP_GLOBAL_REG "r14" +# define ZEND_VM_IP_GLOBAL_REG "r15" # elif defined(__IBMC__) && ZEND_GCC_VERSION >= 4002 && defined(__powerpc64__) -# define ZEND_VM_FP_GLOBAL_REG "r28" -# define ZEND_VM_IP_GLOBAL_REG "r29" +# define ZEND_VM_FP_GLOBAL_REG "r14" +# define ZEND_VM_IP_GLOBAL_REG "r15" # elif defined(__GNUC__) && ZEND_GCC_VERSION >= 4008 && defined(__aarch64__) # define ZEND_VM_FP_GLOBAL_REG "x27" # define ZEND_VM_IP_GLOBAL_REG "x28"