X-Original-To: alpine-aports@lists.alpinelinux.org Received: from mail.infogroup.kiev.ua (tera.infogroup.kiev.ua [195.144.25.26]) by lists.alpinelinux.org (Postfix) with ESMTP id 6C6BC5C4354 for ; Wed, 22 Feb 2017 21:56:54 +0000 (GMT) Received: from ost.org.ua ([195.144.25.230] helo=alpine.ost.org.ua) by mail.infogroup.kiev.ua with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.80.1) (envelope-from ) id 1cgeu5-0008SD-Ld for alpine-aports@lists.alpinelinux.org; Wed, 22 Feb 2017 23:56:53 +0200 From: Valery Kartel To: alpine-aports@lists.alpinelinux.org Subject: [alpine-aports] [PATCH] community/php7: fix php bug #74105 Date: Wed, 22 Feb 2017 23:56:53 +0200 Message-Id: <20170222215653.26588-1-valery.kartel@gmail.com> X-Mailer: git-send-email 2.11.1 Sender: droid@infogroup.kiev.ua X-Mailinglist: alpine-aports Precedence: list List-Id: Alpine Development List-Unsubscribe: List-Post: List-Help: List-Subscribe: backport of php upstream patch fix getrandom() call for images, deployed on kernel < 3.17 https://github.com/php/php-src/pull/2385 --- community/php7/APKBUILD | 24 ++------ community/php7/getrandom.patch | 128 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 20 deletions(-) create mode 100644 community/php7/getrandom.patch diff --git a/community/php7/APKBUILD b/community/php7/APKBUILD index 3778af183a..edf384f45d 100644 --- a/community/php7/APKBUILD +++ b/community/php7/APKBUILD @@ -3,7 +3,7 @@ pkgname=php7 _pkgreal=php pkgver=7.0.16 -pkgrel=0 +pkgrel=1 pkgdesc="The PHP language runtime engine - 7th branch" url="http://www.php.net/" arch="all" @@ -34,6 +34,7 @@ source="http://php.net/distributions/$_pkgreal-$pkgver.tar.bz2 includedir.patch fix-asm-constraints-in-aarch64-multiply-macro.patch pid_log.patch + getrandom.patch " builddir="$srcdir/$_pkgreal-$pkgver" @@ -338,24 +339,6 @@ _package_ext() { > "$subpkgdir"/etc/$pkgname/conf.d/${elo}_${extname}.ini } -md5sums="ef8efd33842f1b2e6ea60bb54b418a6e php-7.0.16.tar.bz2 -4115cbd0843c72adc3bd42fecd6d4540 php7-fpm.initd -25bde13e7894c2930d97fad68d5dd3b3 php7-fpm.logrotate -47be6cd1ed92f21579e15bf2003a709f php7-module.conf -483bc0a85c50a9a9aedbe14a19ed4526 install-pear.patch -66f0037a029f9eed2b31d2e1d50f1860 tidy-buffio.patch -d872e633c9b33c3c9f629dd2edd2e5c5 includedir.patch -fa807a684fa853720b7523eb99869b34 fix-asm-constraints-in-aarch64-multiply-macro.patch -6ba762ab7a105163b8e5b3913deae109 pid_log.patch" -sha256sums="83c5f57575dc0feca563af529d6f1d60183bf9c2c13e98a6da131fbd0a3597ab php-7.0.16.tar.bz2 -a7e4fc0eeba18aec019f62ed966915afd82b6b5fb1e1af93b59f964b5bd66172 php7-fpm.initd -6e4406f21b69085714cdb9d9a67c08e27a1c737ab353f9813cb2fc268352d2c6 php7-fpm.logrotate -276c823ee666ea73b36d4e97174eeea05713125b61f7f8681e350453c4123143 php7-module.conf -f739ca427a1dd53a388bad0823565299c5d4a5796b1171b892884e4d7d099bab install-pear.patch -5dc8f32e5e2b1cd6317ada5a5adb9b5f0802ed6e0dbe065d7bfcc0f55d47e0d5 tidy-buffio.patch -ea74966a23b1b54548ee35e9ccc2fc8d2b7c2285c385c44d6b23d9e2f25ea1a7 includedir.patch -86f4186699f0bc61ce91986fe5efdd7b0da77ff9568c10ba52ca1094da94ed6e fix-asm-constraints-in-aarch64-multiply-macro.patch -0cca8729c64682387a8c44ed74f0966da697f2817152d8d05bb25bedc7eaafec pid_log.patch" sha512sums="b6f44fd1ba0bd97c2af13e74b750761561adc8f859607383a4927aa6924d5a2ef46a547c0d154261c9131d07d41e8c0d2ea153b32546b7122ec1ad7aa1fc19cd php-7.0.16.tar.bz2 1c708de82d1086f272f484faf6cf6d087af7c31750cc2550b0b94ed723961b363f28a947b015b2dfc0765caea185a75f5d2c2f2b099c948b65c290924f606e4f php7-fpm.initd cacce7bf789467ff40647b7319e3760c6c587218720538516e8d400baa75651f72165c4e28056cd0c1dc89efecb4d00d0d7823bed80b29136262c825ce816691 php7-fpm.logrotate @@ -364,4 +347,5 @@ f1177cbf6b1f44402f421c3d317aab1a2a40d0b1209c11519c1158df337c8945f3a313d689c93976 6894c9cba7752a3406e774d9efc0e058c37433493c1c20101e9563bf247c112157a67e306b06b9517b0422eca521f543d637a6cbd2cea7639e43f13d773b3d2b tidy-buffio.patch 199aecdbd3b4035aabf5379c215f82412d3c98b79a1ee186944e7fe1f0ed6f40789ea30e2355149491de6be34fc66c5e486e2a79a7e41ab2ae18706ef3ffe79b includedir.patch d93d3fc015580cf5f75c6cbca4cd980e054b61e1068495da81a7e61f1af2c9ae14f09964c04928ad338142de78e4844aed885b1ad1865282072999fb045c8ad7 fix-asm-constraints-in-aarch64-multiply-macro.patch -82231c7b27b4d044272857dc713674884715ed8e36e54be06faa5d2a949ba4bca597628958a9c5683ec51c36e05a00f6be811c7e95112b0314c98528f584a8d6 pid_log.patch" +82231c7b27b4d044272857dc713674884715ed8e36e54be06faa5d2a949ba4bca597628958a9c5683ec51c36e05a00f6be811c7e95112b0314c98528f584a8d6 pid_log.patch +da012a82c00f9dfd3b6e446e2c3e7da597079e9b428f53ca61b5e216c304e3c02e953a5fc2759e516580cb98f08e86b0f5b33ea8df99a8003ae33fcb431463b4 getrandom.patch" diff --git a/community/php7/getrandom.patch b/community/php7/getrandom.patch new file mode 100644 index 0000000000..205a226b4e --- /dev/null +++ b/community/php7/getrandom.patch @@ -0,0 +1,128 @@ +--- a/ext/standard/random.c ++++ b/ext/standard/random.c +@@ -93,14 +93,13 @@ PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw) + } + #elif HAVE_DECL_ARC4RANDOM_BUF && ((defined(__OpenBSD__) && OpenBSD >= 201405) || (defined(__NetBSD__) && __NetBSD_Version__ >= 700000001)) + arc4random_buf(bytes, size); +-#elif defined(__linux__) && defined(SYS_getrandom) +- /* Linux getrandom(2) syscall */ ++#else + size_t read_bytes = 0; +- size_t amount_to_read = 0; + ssize_t n; +- ++#if defined(__linux__) && defined(SYS_getrandom) ++ /* Linux getrandom(2) syscall */ + /* Keep reading until we get enough entropy */ +- do { ++ while (read_bytes < size) { + /* Below, (bytes + read_bytes) is pointer arithmetic. + + bytes read_bytes size +@@ -110,11 +109,17 @@ PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw) + amount_to_read + + */ +- amount_to_read = size - read_bytes; ++ size_t amount_to_read = size - read_bytes; + n = syscall(SYS_getrandom, bytes + read_bytes, amount_to_read, 0); + + if (n == -1) { +- if (errno == EINTR || errno == EAGAIN) { ++ if (errno == ENOSYS) { ++ /* This can happen if PHP was compiled against a newer kernel where getrandom() ++ * is available, but then runs on an older kernel without getrandom(). If this ++ * happens we simply fall back to reading from /dev/urandom. */ ++ ZEND_ASSERT(read_bytes == 0); ++ break; ++ } else if (errno == EINTR || errno == EAGAIN) { + /* Try again */ + continue; + } +@@ -130,53 +135,52 @@ PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw) + } + + read_bytes += (size_t) n; +- } while (read_bytes < size); +-#else +- int fd = RANDOM_G(fd); +- struct stat st; +- size_t read_bytes = 0; +- ssize_t n; ++ } ++#endif ++ if (read_bytes < size) { ++ int fd = RANDOM_G(fd); ++ struct stat st; + +- if (fd < 0) { ++ if (fd < 0) { + #if HAVE_DEV_URANDOM +- fd = open("/dev/urandom", O_RDONLY); ++ fd = open("/dev/urandom", O_RDONLY); + #endif +- if (fd < 0) { +- if (should_throw) { +- zend_throw_exception(zend_ce_exception, "Cannot open source device", 0); ++ if (fd < 0) { ++ if (should_throw) { ++ zend_throw_exception(zend_ce_exception, "Cannot open source device", 0); ++ } ++ return FAILURE; + } +- return FAILURE; +- } +- /* Does the file exist and is it a character device? */ +- if (fstat(fd, &st) != 0 || ++ /* Does the file exist and is it a character device? */ ++ if (fstat(fd, &st) != 0 || + # ifdef S_ISNAM +- !(S_ISNAM(st.st_mode) || S_ISCHR(st.st_mode)) ++ !(S_ISNAM(st.st_mode) || S_ISCHR(st.st_mode)) + # else +- !S_ISCHR(st.st_mode) ++ !S_ISCHR(st.st_mode) + # endif +- ) { +- close(fd); +- if (should_throw) { +- zend_throw_exception(zend_ce_exception, "Error reading from source device", 0); ++ ) { ++ close(fd); ++ if (should_throw) { ++ zend_throw_exception(zend_ce_exception, "Error reading from source device", 0); ++ } ++ return FAILURE; + } +- return FAILURE; ++ RANDOM_G(fd) = fd; + } +- RANDOM_G(fd) = fd; +- } + +- while (read_bytes < size) { +- n = read(fd, bytes + read_bytes, size - read_bytes); +- if (n <= 0) { +- break; ++ for (read_bytes = 0; read_bytes < size; read_bytes += (size_t) n) { ++ n = read(fd, bytes + read_bytes, size - read_bytes); ++ if (n <= 0) { ++ break; ++ } + } +- read_bytes += n; +- } + +- if (read_bytes < size) { +- if (should_throw) { +- zend_throw_exception(zend_ce_exception, "Could not gather sufficient random data", 0); ++ if (read_bytes < size) { ++ if (should_throw) { ++ zend_throw_exception(zend_ce_exception, "Could not gather sufficient random data", 0); ++ } ++ return FAILURE; + } +- return FAILURE; + } + #endif + -- 2.11.1 --- Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org Help: alpine-aports+help@lists.alpinelinux.org ---