|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2015-09-15 17:41 UTC] lbarnaud@php.net
Description: ------------ There is an issue in the user-space session handler implementation that can leave a variable uninitialised. This causes random crashes or memory exhaustions. See https://github.com/php/php-src/blob/6065b29fe41f09e01dd06ba21980e0344f13230c/ext/session/mod_user.c#L122 When SessionHandlerInterface::read() returns anything that's not a string, `val` is left uninitialised. I've seen this bug causing crashed and memory exhaustions. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 02 18:00:01 2025 UTC |
Here is a gdb backtrace: Breakpoint 1, zend_error (type=type@entry=1, format=format@entry=0xbe78e0 "Allowed memory size of %ld bytes exhausted (tried to allocate %lu bytes)") at /usr/src/builddir/Zend/zend.c:1018 1018 /usr/src/builddir/Zend/zend.c: No such file or directory. #0 zend_error (type=type@entry=1, format=format@entry=0xbe78e0 "Allowed memory size of %ld bytes exhausted (tried to allocate %lu bytes)") at /usr/src/builddir/Zend/zend.c:1018 #1 0x00000000006c6f56 in zend_mm_safe_error (heap=heap@entry=0x2a49300, format=format@entry=0xbe78e0 "Allowed memory size of %ld bytes exhausted (tried to allocate %lu bytes)", limit=134217728, size=size@entry=43253749) at /usr/src/builddir/Zend/zend_alloc.c:1775 #2 0x00000000006c79c3 in _zend_mm_alloc_int (heap=0x2a49300, size=43253749) at /usr/src/builddir/Zend/zend_alloc.c:1978 #3 0x00000000006fcbab in _zend_hash_add_or_update (ht=0x383eb78, arKey=arKey@entry=0x7f913d082030 "", nKeyLength=nKeyLength@entry=43253677, pData=pData@entry=0x7fff8160b488, nDataSize=nDataSize@entry=8, pDest=pDest@entry=0x0, flag=flag@entry=1) at /usr/src/builddir/Zend/zend_hash.c:253 #4 0x00000000006f6a94 in zend_set_hash_symbol (symbol=0x1, name=name@entry=0x7f913d082030 "", name_length=43253676, is_ref=<optimized out>, num_symbol_tables=0, num_symbol_tables@entry=1) at /usr/src/builddir/Zend/zend_API.c:2606 #5 0x000000000058580c in php_set_session_var (name=name@entry=0x7f913d082030 "", namelen=namelen@entry=43253676, state_val=<optimized out>, var_hash=var_hash@entry=0x7fff8160b520) at /usr/src/builddir/ext/session/session.c:166 #6 0x0000000000585a45 in ps_srlzr_decode_php (val=<optimized out>, vallen=<optimized out>) at /usr/src/builddir/ext/session/session.c:1048 #7 0x0000000000584a97 in php_session_decode (val=<optimized out>, vallen=<optimized out>) at /usr/src/builddir/ext/session/session.c:225 #8 0x0000000000588433 in php_session_initialize () at /usr/src/builddir/ext/session/session.c:520 #9 0x0000000000588aa5 in php_session_start () at /usr/src/builddir/ext/session/session.c:1610 #10 0x0000000000588ffb in zif_session_start (ht=<optimized out>, return_value=0x3a38ba8, return_value_ptr=<optimized out>, this_ptr=<optimized out>, return_value_used=<optimized out>) at /usr/src/builddir/ext/session/session.c:2073 #11 0x00000000006dec59 in dtrace_execute_internal (execute_data_ptr=<optimized out>, fci=<optimized out>, return_value_used=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:97 #12 0x000000000079fe3b in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc19078) at /usr/src/builddir/Zend/zend_vm_execute.h:552 #13 0x000000000075e808 in execute_ex (execute_data=0x7f915cc19078) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #14 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #15 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18f90) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #16 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18f90) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #17 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #18 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18e78) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #19 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18e78) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #20 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #21 0x00000000006e0e41 in zend_call_function (fci=fci@entry=0x7fff8160bc30, fci_cache=0x3054e58, fci_cache@entry=0x7fff8160bc00) at /usr/src/builddir/Zend/zend_execute_API.c:934 #22 0x0000000000611cc4 in zif_call_user_func (ht=<optimized out>, return_value=0x3a375d8, return_value_ptr=<optimized out>, this_ptr=<optimized out>, return_value_used=<optimized out>) at /usr/src/builddir/ext/standard/basic_functions.c:4787 #23 0x00000000006dec59 in dtrace_execute_internal (execute_data_ptr=<optimized out>, fci=<optimized out>, return_value_used=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:97 #24 0x000000000079fe3b in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18c80) at /usr/src/builddir/Zend/zend_vm_execute.h:552 #25 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18c80) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #26 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #27 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18af0) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #28 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18af0) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #29 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #30 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc189d8) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #31 0x000000000075e808 in execute_ex (execute_data=0x7f915cc189d8) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #32 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #33 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc188b0) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #34 0x000000000075e808 in execute_ex (execute_data=0x7f915cc188b0) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #35 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #36 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc186d8) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #37 0x000000000075e808 in execute_ex (execute_data=0x7f915cc186d8) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #38 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #39 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18580) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #40 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18580) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #41 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #42 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18410) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #43 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18410) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #44 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #45 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc182e0) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #46 0x000000000075e808 in execute_ex (execute_data=0x7f915cc182e0) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #47 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #48 0x00000000007a04a4 in zend_do_fcall_common_helper_SPEC (execute_data=0x7f915cc18198) at /usr/src/builddir/Zend/zend_vm_execute.h:584 #49 0x000000000075e808 in execute_ex (execute_data=0x7f915cc18198) at /usr/src/builddir/Zend/zend_vm_execute.h:363 #50 0x00000000006deb2d in dtrace_execute_ex (execute_data=<optimized out>) at /usr/src/builddir/Zend/zend_dtrace.c:73 #51 0x00000000006f0889 in zend_execute_scripts (type=type@entry=8, retval=retval@entry=0x0, file_count=file_count@entry=3) at /usr/src/builddir/Zend/zend.c:1327 #52 0x000000000068e352 in php_execute_script (primary_file=primary_file@entry=0x7fff8160ee30) at /usr/src/builddir/main/main.c:2525 #53 0x00000000004714a2 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/builddir/sapi/fpm/fpm/fpm_main.c:1953 Source directories searched: /home/mention/php-src/ext/session:/home/mention/php-src:$cdir:$cwd #2 0x00000000006c79c3 in _zend_mm_alloc_int (heap=0x2a49300, size=43253749) at /usr/src/builddir/Zend/zend_alloc.c:1978 1978 /usr/src/builddir/Zend/zend_alloc.c: No such file or directory. (gdb) p size $1 = 43253749 #8 0x0000000000588433 in php_session_initialize () at /usr/src/builddir/ext/session/session.c:520 ( https://github.com/php/php-src/blob/php-5.5.29/ext/session/session.c#L520 ) 520 php_session_decode(val, vallen TSRMLS_CC); (gdb) p val $2 = 0x7f913a6c1030 "" (gdb) p vallen $3 = 43253760 In this case, it's just a memory exhaustion because the uninitialized `vallen` is big enough to exceed the memory_limit. With a small enough `vallen`, the process eventually attempts to read an invalid memory region and crashes. This trace has been produced with PHP 5.5.29 under the FPM SAPI.