From: Elan Ruusamäe Date: Fri, 20 Mar 2015 14:48:32 +0000 (+0000) Subject: patch for x32 with suhosin enabled as well X-Git-Tag: auto/th/php53-5.3.29-13~1 X-Git-Url: http://git.pld-linux.org/?p=packages%2Fphp.git;a=commitdiff_plain;h=ec621f6 patch for x32 with suhosin enabled as well --- diff --git a/php.spec b/php.spec index 0edd0f9..4b5abe9 100644 --- a/php.spec +++ b/php.spec @@ -2052,10 +2052,10 @@ cp -p php.ini-production php.ini %patch44 -p1 %patch45 -p1 %patch46 -p1 -%patch68 -p1 %if %{with suhosin} %patch47 -p1 %endif +%patch68 -p1 %patch48 -p1 %patch49 -p1 %patch50 -p1 diff --git a/x32.patch b/x32.patch index 5e4a89a..469c7ca 100644 --- a/x32.patch +++ b/x32.patch @@ -52,6 +52,56 @@ Fix bug #64729: compilation failure on x32 "rm"(size), "rm"(offset)); ++#undef LP_SUFF ++ + if (UNEXPECTED(overflow)) { + zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); + return 0; +--- a/Zend/zend_alloc_canary.c ++++ b/Zend/zend_alloc_canary.c +@@ -720,7 +720,7 @@ static inline unsigned int zend_mm_high_bit(size_t _size) + #elif defined(__GNUC__) && defined(__x86_64__) + unsigned long n; + +- __asm__("bsrq %1,%0\n\t" : "=r" (n) : "rm" (_size)); ++ __asm__("bsr %1,%0\n\t" : "=r" (n) : "rm" (_size)); + return (unsigned int)n; + #elif defined(_MSC_VER) && defined(_M_IX86) + __asm { +@@ -746,12 +746,12 @@ static inline unsigned int zend_mm_low_bit(size_t _size) + #elif defined(__GNUC__) && defined(__x86_64__) + unsigned long n; + +- __asm__("bsfq %1,%0\n\t" : "=r" (n) : "rm" (_size)); ++ __asm__("bsf %1,%0\n\t" : "=r" (n) : "rm" (_size)); + return (unsigned int)n; + #elif defined(_MSC_VER) && defined(_M_IX86) + __asm { + bsf eax, _size +- } ++ } + #else + static const int offset[16] = {4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}; + unsigned int n; +@@ -2481,12 +2481,22 @@ static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) + size_t res = nmemb; + unsigned long overflow = 0; + +- __asm__ ("mulq %3\n\taddq %4,%0\n\tadcq %1,%1" ++#ifdef __ILP32__ /* x32 */ ++# define LP_SUFF "l" ++#else /* amd64 */ ++# define LP_SUFF "q" ++#endif ++ ++ __asm__ ("mul" LP_SUFF " %3\n\t" ++ "add %4,%0\n\t" ++ "adc %1,%1" + : "=&a"(res), "=&d" (overflow) + : "%0"(res), + "rm"(size), + "rm"(offset)); + +#undef LP_SUFF + if (UNEXPECTED(overflow)) {