From 93d32eae2751089ed0d255ba2cf37d5c8a7353e5 Mon Sep 17 00:00:00 2001 From: Arnaud Le Blanc Date: Tue, 27 Jan 2026 15:24:45 +0100 Subject: [PATCH] Add missing clobbered registers Inline assembly in zend_safe_address() clobbers flags register. Add missing register in clobber list for aarch64 and powerpc64. Other archs were already correct. Fixes GH-21029 --- NEWS | 2 ++ Zend/zend_multiply.h | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index b593a1827b1..c4a6378163c 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? ????, PHP 8.4.19 +- Core: + . Fixed bug GH-21029 (zend_mm_heap corrupted on Aarch64, LTO builds). (Arnaud) 12 Feb 2026, PHP 8.4.18 diff --git a/Zend/zend_multiply.h b/Zend/zend_multiply.h index 3e730042e7a..d536d3247f6 100644 --- a/Zend/zend_multiply.h +++ b/Zend/zend_multiply.h @@ -267,7 +267,8 @@ static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, si : "=&r"(res), "=&r"(m_overflow) : "r"(nmemb), "r"(size), - "r"(offset)); + "r"(offset) + : "cc"); if (UNEXPECTED(m_overflow)) { *overflow = 1; @@ -291,7 +292,8 @@ static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, si : "=&r"(res), "=&r"(m_overflow) : "r"(nmemb), "r"(size), - "r"(offset)); + "r"(offset) + : "xer"); if (UNEXPECTED(m_overflow)) { *overflow = 1;