JIT: SEGV in exception handler stub after OOM inside an output-buffer callback

Ouverte
#25,304 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
42/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
Active
Stack technique
c, php
Domaine
backend

Piste de recherche

Start by reproducing the crash with the supplied PHP script and CLI command, with JIT tracing enabled and a 16M memory limit. Then trace the exception handler stub reached after the output-buffer callback runs out of memory. Done when the reproducer no longer crashes and a regression test covers the failure.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Bug Status: Needs Triage
Description

The following code:

<?php
$o = new stdClass;
ob_start(function ($buffer) use (&$storage) {
    $storage .= $buffer;
    return '';
}, 1);
while ($o < 10);

Resulted in this output:

==3128836==ERROR: AddressSanitizer: SEGV on unknown address 0x00000000001f (pc 0x0000484f1049 bp 0x7ffeced13390 sp 0x7ffeced132b0 T0)
==3128836==The signal is caused by a READ memory access.
==3128836==Hint: address points to the zero page.
    #0 0x484f1049  (/dev/zero (deleted)+0x8000049)

SUMMARY: AddressSanitizer: SEGV (/dev/zero (deleted)+0x8000049) 

To reproduce: USE_ZEND_ALLOC=1 ./sapi/cli/php -d memory_limit=16M -d opcache.enable_cli=1 -d opcache.jit=tracing -d opcache.jit_buffer_size=64M -d opcache.file_update_protection=0 test.php

Commit:

33a61f765a94e018a8d55d962a73e8c8331ee256

Configurations:

CC="clang-12" CXX="clang++-12" CFLAGS="-DZEND_VERIFY_TYPE_INFERENCE" CXXFLAGS="-DZEND_VERIFY_TYPE_INFERENCE" ./configure --enable-debug --enable-address-sanitizer --enable-undefined-sanitizer --enable-re2c-cgoto --enable-zts --enable-bcmath --enable-calendar --enable-dba --enable-dl-test --enable-exif --enable-ftp --enable-gd --enable-gd-jis-conv --enable-mbstring --enable-pcntl --enable-shmop --enable-soap --enable-sockets --enable-sysvmsg --enable-zend-test --with-zlib --with-bz2 --with-curl --with-enchant --with-gettext --with-gmp --with-mhash --with-ldap --with-libedit --with-readline --with-snmp --with-sodium --with-xsl --with-zip --with-mysqli --with-pdo-mysql --with-pdo-pgsql --with-pgsql --with-sqlite3 --with-pdo-sqlite --with-webp --with-jpeg --with-freetype --enable-sigchild --with-pcre-jit --with-iconv

Operating System:

Ubuntu 20.04 Host, Docker 0599jiangyc/flowfusion:latest

This report is automatically generated by FlowFusion

PHP Version
nightly
Operating System

No response

Langage dominant
C
Étoiles
41.8k
Forks
8.5k
Merge moyen
2 j 12 h
PR mergées (30 j)
137

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de php/php-src

Toutes les issues de php/php-src

Issues similaires

Plus d'issues C

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.