-
Notifications
You must be signed in to change notification settings - Fork 8k
Closed
Description
Description
In the file sapi/cli/php_cli_server.c, the function php_cli_server_startup_workers has the following code:
void php_cli_server_startup_workers(void) {
char *workers = getenv("PHP_CLI_SERVER_WORKERS");
if (!workers) {
return;
}
php_cli_server_workers_max = ZEND_ATOL(workers);
if (php_cli_server_workers_max > 1) {
php_cli_server_workers = calloc(
php_cli_server_workers_max, sizeof(pid_t));
...
}
}
The variable php_cli_server_workers_max is parsed from environment variable and thus is controlled. When setting php_cli_server_workers_max to a large value (e.g., INT64_MAX), the multiplication php_cli_server_workers_max * sizeof(pid_t) could wrap to a small value. A buffer smaller than expected will be allocated and this can lead to subsequent buffer overflow.
Notice that the C standard does not clearly states that calloc will check for multiplication overflow itself (see here). It will be better to also restrict the maximum value for php_cli_server_workers_max in the code.
PHP Version
github master
Operating System
No response