[php-src] Issue #8940: Support hardened malloc
| From: | cgzones | Date: | Wed, 06 Jul 2022 17:41:41 +0000 |
| Subject: | [php-src] Issue #8940: Support hardened malloc | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-241872@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/8940
Author: cgzones
### Description
When using [hardened malloc](https://github.com/GrapheneOS/hardened_malloc) php segfaults due to a
report of double free or memory corruption from the hardened allocator:
```
Core was generated by `/usr/sbin/php-fpm8.1 --nodaemonize --fpm-config
/etc/php/8.1/fpm/php-fpm.conf'.
Program terminated with signal SIGABRT, Aborted.
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49
49 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt full
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:49
set = {__val = {68096, 128064363255532, 2090512752, 1, 128064350344860, 128064357541232, 1,
95230346296447, 720, 95230346296664, 127902518216960, 140731259452880, 127902518216960,
95230346296447, 140731259452880, 114599034921464}}
pid = <optimized out>
tid = <optimized out>
ret = <optimized out>
#1 0x000074794e1e5546 in __GI_abort () at abort.c:79
save_stage = 1
act = {__sigaction_handler = {sa_handler = 0x7453a02a0900, sa_sigaction = 0x7453a02a0900},
sa_mask = {__val = {128064363158178, 140731259453312, 11151701787683411968, 115494027777088, 0,
95230347530624, 114956386561024, 114599035052984, 114956386561024,
115494027777024, 95230346354345, 115494027777088, 1, 95230348423520, 95230347472523,
115494027778112}}, sa_flags = 1, sa_restorer = 0x74794d931100 <class_PDOException_methods>}
sigs = {__val = {32, 128064363158178, 127902518225408, 32, 127902518225408, 128064363158178,
95230347712736, 7, 95230348722848, 320, 16, 16, 140731259453296, 114599035043296, 95230348423520,
95230346857943}}
#2 0x000074794e23ceb8 in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x74794e35aa78
"%s\n") at ../sysdeps/posix/libc_fatal.c:155
ap = {{gp_offset = 24, fp_offset = 0, overflow_arg_area = 0x7ffe8cba8080, reg_save_area =
0x7ffe8cba8010}}
fd = <optimized out>
list = <optimized out>
nlist = <optimized out>
cp = <optimized out>
#3 0x000074794e24491a in malloc_printerr (str=str@entry=0x74794e35cf80 "double free or
corruption (out)") at malloc.c:5628
No locals.
#4 0x000074794e2461a0 in _int_free (av=0x74794e391ba0 <main_arena>, p=0x683a2ac6fe00,
have_lock=<optimized out>) at malloc.c:4547
size = 9174903411436676608
fb = <optimized out>
nextchunk = 0x7f543644e9fae400
nextsize = <optimized out>
nextinuse = <optimized out>
prevsize = <optimized out>
bck = <optimized out>
fwd = <optimized out>
__PRETTY_FUNCTION__ = "_int_free"
#5 0x000074794e2499b4 in __GI___libc_free (mem=<optimized out>) at malloc.c:3309
[43/969]
ar_ptr = <optimized out>
p = <optimized out>
hook = <optimized out>
err = 2
#6 0x000074794d925888 in zend_string_release (s=0x683a2ac6fe10) at ./Zend/zend_string.h:322
No locals.
#7 register_class_PDOException (class_entry_RuntimeException=<optimized out>) at
./ext/pdo/pdo_arginfo.h:32
ce = {type = 0 '\000', name = 0x683a2ac6fdb0, {parent = 0x0, parent_name = 0x0},
refcount = 0, ce_flags = 0, default_properties_count = 0, default_static_members_count = 0,
default_properties_table = 0x0, default_static_members_table = 0x0,
static_members_table__ptr = 0x0, function_table = {gc = {refcount = 0, u = {type_info =
0}}, u = {v = {flags = 0 '\000', _unused = 0 '\000', nIteratorsCount = 0
'\000', _unused2 = 0 '\000'}, flags = 0}, nTableMask = 0, arData = 0x0, nNumUsed
= 0,
nNumOfElements = 0, nTableSize = 0, nInternalPointer = 0, nNextFreeElement = 0,
pDestructor = 0x0}, properties_info = {gc = {refcount = 0, u = {type_info = 0}}, u = {v = {flags = 0
'\000', _unused = 0 '\000', nIteratorsCount = 0 '\000',
_unused2 = 0 '\000'}, flags = 0}, nTableMask = 0, arData = 0x0, nNumUsed =
0, nNumOfElements = 0, nTableSize = 0, nInternalPointer = 0, nNextFreeElement = 0, pDestructor =
0x0}, constants_table = {gc = {refcount = 0, u = {type_info = 0}}, u = {v = {
flags = 0 '\000', _unused = 0 '\000', nIteratorsCount = 0
'\000', _unused2 = 0 '\000'}, flags = 0}, nTableMask = 0, arData = 0x0, nNumUsed
= 0, nNumOfElements = 0, nTableSize = 0, nInternalPointer = 0, nNextFreeElement = 0, pDestructor =
0x0},
mutable_data__ptr = 0x0, inheritance_cache = 0x0, properties_info_table = 0x0, constructor
= 0x0, destructor = 0x0, clone = 0x0, __get = 0x0, __set = 0x0, __unset = 0x0, __isset = 0x0, __call
= 0x0, __callstatic = 0x0, __tostring = 0x0, __debugInfo = 0x0,
__serialize = 0x0, __unserialize = 0x0, iterator_funcs_ptr = 0x0, {create_object = 0x0,
interface_gets_implemented = 0x0}, get_iterator = 0x0, get_static_method = 0x0, serialize = 0x0,
unserialize = 0x0, num_interfaces = 0, num_traits = 0, {interfaces = 0x0, i
nterface_names = 0x0}, trait_names = 0x0, trait_aliases = 0x0, trait_precedences = 0x0, attributes =
0x0, enum_backing_type = 0, backed_enum_table = 0x0, info = {user = {filename = 0x74794d931100
<class_PDOException_methods>, line_start = 0, line_end = 0, doc_comment =
0x0}, internal = {builtin_functions = 0x74794d931100 <class_PDOException_methods>, module =
0x0}}}
class_entry = 0x690a8c7fd800
property_code_default_value = {value = {lval = 0, dval = 0, counted = 0x0, str = 0x0, arr =
0x0, obj = 0x0, res = 0x0, ref = 0x0, ast = 0x0, zv = 0x0, ptr = 0x0, ce = 0x0, func = 0x0, ww = {w1
= 0, w2 = 0}}, u1 = {type_info = 4, v = {type = 4 '\004', type_flags
= 0 '\000', u = {extra = 0}}}, u2 = {next = 22172, cache_slot = 22172, opline_num = 22172,
lineno = 22172, num_args = 22172, fe_pos = 22172, fe_iter_idx = 22172, property_guard = 22172,
constant_flags = 22172, extra = 22172}}
property_code_name = 0x683a2ac6fe10
property_errorInfo_default_value = {value = {lval = 0, dval = 0, counted = 0x0, str = 0x0,
arr = 0x0, obj = 0x0, res = 0x0, ref = 0x0, ast = 0x0, zv = 0x0, ptr = 0x0, ce = 0x0, func = 0x0, ww
= {w1 = 0, w2 = 0}}, u1 = {type_info = 717666512, v = {type = 208 '\32
0', type_flags = 184 '\270', u = {extra = 10950}}}, u2 = {next = 26682, cache_slot =
26682, opline_num = 26682, lineno = 26682, num_args = 26682, fe_pos = 26682, fe_iter_idx = 26682,
property_guard = 26682, constant_flags = 26682, extra = 26682}}
property_errorInfo_name = <optimized out>
#8 0x000074794d9258fc in zm_startup_pdo (type=<optimized out>, module_number=17) at
./ext/pdo/pdo.c:253
No locals.
#9 0x0000569c8af74d48 in zend_startup_module_ex (module=0x68a7d30ec900) at ./Zend/zend_API.c:2199
name_len = <optimized out>
lcname = <optimized out>
name_len = <optimized out>
lcname = <optimized out>
dep = <optimized out>
req_mod = <optimized out>
#10 zend_startup_module_ex (module=0x68a7d30ec900) at ./Zend/zend_API.c:2152
name_len = <optimized out>
lcname = <optimized out>
dep = <optimized out>
req_mod = <optimized out>
#11 0x0000569c8af74ddc in zend_startup_module_zval (zv=<optimized out>) at
./Zend/zend_API.c:2214
module = <optimized out>
#12 0x0000569c8af82822 in zend_hash_apply (ht=ht@entry=0x569c8b1f32e0 <module_registry>,
apply_func=apply_func@entry=0x569c8af74dd0 <zend_startup_module_zval>) at
./Zend/zend_hash.c:1862
idx = 16
p = 0x69a874180400
result = <optimized out>
#13 0x0000569c8af7509b in zend_startup_modules () at ./Zend/zend_API.c:2325
No locals.
#14 0x0000569c8af0c613 in php_module_startup (sf=<optimized out>,
additional_modules=additional_modules@entry=0x569c8b1dab00 <cgi_module_entry>,
num_additional_modules=num_additional_modules@entry=1) at ./main/main.c:2256
zuf = {error_function = 0x569c8ad94aef <php_error_cb>, printf_function =
0x569c8af0a300 <php_printf>, write_function = 0x569c8af1e1c0 <php_output_write>,
fopen_function = 0x569c8af0b0c0 <php_fopen_wrapper_for_zend>, message_handler = 0x569c8ad957db
<php_message_
handler_for_zend>, get_configuration_directive = 0x569c8af0b0b0
handler_for_zend><php_get_configuration_directive_for_zend>, ticks_function = 0x569c8af1aa70
handler_for_zend><php_run_ticks>, on_timeout = 0x569c8af0a260 <php_on_timeout>, stream_open_function =
handler_for_zend>0x569c8af0b6d0 <php_stream_open_for_zend>, p
rintf_to_smart_string_function = 0x569c8af109f0 <php_printf_to_smart_string>,
printf_to_smart_str_function = 0x569c8af10a00 <php_printf_to_smart_str>, getenv_function =
0x569c8af15540 <sapi_getenv>, resolve_path_function = 0x569c8af0b090
<php_resolve_path_for_zend>}
zuv = {html_errors = true}
retval = 0
module_number = 0
php_os = 0x569c8b09c331 "Linux"
module = <optimized out>
#15 0x0000569c8b05ee75 in php_cgi_startup (sapi_module=<optimized out>) at
./sapi/fpm/fpm/fpm_main.c:769
No locals.
#16 0x0000569c8adb7430 in main (argc=4, argv=0x7ffe8cba9e98) at ./sapi/fpm/fpm/fpm_main.c:1747
exit_status = 0
cgi = 0
c = -1
use_extended_info = 0
file_handle = {handle = {fp = 0x0, stream = {handle = 0x0, isatty = 1323280968, reader =
0x7ffe8cba9df0, fsizer = 0x74794ee21a4a <_dl_runtime_resolve_xsavec+122>, closer =
0x74794e0098c0}}, filename = 0x20, opened_path = 0x7ffe8cba9ec0, type = 152 '\230', primar
y_script = 158, in_list = 186, buf = 0x11c00 <error: Cannot access memory at address 0x11c00>,
len = 0}
orig_optind = 1
orig_optarg = 0x0
ini_entries_len = 0
max_requests = 0
requests = 0
fcgi_fd = 0
request = <optimized out>
fpm_config = 0x7ffe8cbaaecc "/etc/php/8.1/fpm/php-fpm.conf"
fpm_prefix = 0x0
fpm_pid = 0x0
test_conf = 0
force_daemon = 0
force_stderr = 0
php_information = 0
php_allow_to_run_as_root = 0
ret = <optimized out>
__func__ = "main"
__orig_bailout = <optimized out>
__bailout = <optimized out>
__str = <optimized out>
```
### PHP Version
PHP 8.1.8
### Operating System
Debian sid