DynamoRIO / DynamoRIO/drmemory
libcmt startup code bugs when have malloc() always fail
- Dominant language
- C
- Stars
- 2.7k
- Forks
- 290
- PR merge metrics
- No merged PRs in 30d
Description
_From [bruen...@google.com](https://code.google.com/u/109494838902877177630/) on March 06, 2012 14:49:13_
using straight-up tests/unload.lib.c built w/ an entry point (originally
used just for issue #545 and so didn't need entry point, just needs to
trigger realloc gencode) we see a lot of errors in CRT startup code.
perhaps not surprising that CRT startup code can't handle malloc failing :)
here's a selection including one of the alloc failure warnings:
Error `#1`: WARNING: heap allocation failed
#0 unloadlibMTd.dll!__crtGetStringTypeA_stat [f:\dd\vctools\crt_bld\self_x86\crt\src\a_str.c:157]
#1 unloadlibMTd.dll!__crtGetStringTypeA [f:\dd\vctools\crt_bld\self_x86\crt\src\a_str.c:206]
#2 unloadlibMTd.dll!setSBUpLow [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:427]
#3 unloadlibMTd.dll!_setmbcp_nolock [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:787]
#4 unloadlibMTd.dll!_setmbcp [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:612]
#5 unloadlibMTd.dll!__initmbctable [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:854]
#6 unloadlibMTd.dll!_setargv [f:\dd\vctools\crt_bld\self_x86\crt\src\stdargv.c:98]
#7 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:132]
#8 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#9 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#10 ntdll.dll!LdrpCallInitRoutine
#11 ntdll.dll!LdrpRunInitializeRoutines
Note: @0:00:02.044 in thread 4876
Error `#4`: UNINITIALIZED READ: reading register eflags
#0 unloadlibMTd.dll!setSBUpLow [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:443]
#1 unloadlibMTd.dll!_setmbcp_nolock [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:787]
#2 unloadlibMTd.dll!_setmbcp [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:612]
#3 unloadlibMTd.dll!__initmbctable [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:854]
#4 unloadlibMTd.dll!_setargv [f:\dd\vctools\crt_bld\self_x86\crt\src\stdargv.c:98]
#5 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:132]
#6 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#7 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#8 ntdll.dll!LdrpCallInitRoutine
#9 ntdll.dll!LdrpRunInitializeRoutines
#10 ntdll.dll!LdrpLoadDll
#11 ntdll.dll!LdrLoadDll
Note: @0:00:02.075 in thread 4876
Note: instruction: jz $0x70bda307
Error `#5`: UNINITIALIZED READ: reading register eflags
#0 unloadlibMTd.dll!setSBUpLow [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:448]
#1 unloadlibMTd.dll!_setmbcp_nolock [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:787]
#2 unloadlibMTd.dll!_setmbcp [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:612]
#3 unloadlibMTd.dll!__initmbctable [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:854]
#4 unloadlibMTd.dll!_setargv [f:\dd\vctools\crt_bld\self_x86\crt\src\stdargv.c:98]
#5 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:132]
#6 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#7 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#8 ntdll.dll!LdrpCallInitRoutine
#9 ntdll.dll!LdrpRunInitializeRoutines
#10 ntdll.dll!LdrpLoadDll
#11 ntdll.dll!LdrLoadDll
Note: @0:00:02.075 in thread 4876
Note: instruction: jz $0x70bda354
Error `#6`: POSSIBLE LEAK 27 direct bytes 0x0129d870-0x0129d88b + 0 indirect bytes
#0 unloadlibMTd.dll!_setenvp [f:\dd\vctools\crt_bld\self_x86\crt\src\stdenvp.c:127]
#1 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:132]
#2 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#3 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#4 ntdll.dll!LdrpCallInitRoutine
#5 ntdll.dll!LdrpRunInitializeRoutines
#6 ntdll.dll!LdrpLoadDll
#7 ntdll.dll!LdrLoadDll
#8 KERNELBASE.dll!LoadLibraryExW
#9 KERNELBASE.dll!LoadLibraryExA
#10 KERNEL32.dll!LoadLibraryA
#11 main [e:\src\drmemory\git\src\tests\unload.c:43]
Error `#7`: POSSIBLE LEAK 544 direct bytes 0x013822f8-0x01382518 + 0 indirect bytes
#0 unloadlibMTd.dll!_setmbcp [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:593]
#1 unloadlibMTd.dll!__initmbctable [f:\dd\vctools\crt_bld\self_x86\crt\src\mbctype.c:854]
#2 unloadlibMTd.dll!_setargv [f:\dd\vctools\crt_bld\self_x86\crt\src\stdargv.c:98]
#3 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:132]
#4 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#5 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#6 ntdll.dll!LdrpCallInitRoutine
#7 ntdll.dll!LdrpRunInitializeRoutines
#8 ntdll.dll!LdrpLoadDll
#9 ntdll.dll!LdrLoadDll
#10 KERNELBASE.dll!LoadLibraryExW
#11 KERNELBASE.dll!LoadLibraryExA
Error `#8`: POSSIBLE LEAK 122 direct bytes 0x01382548-0x013825c2 + 0 indirect bytes
#0 unloadlibMTd.dll!_setargv [f:\dd\vctools\crt_bld\self_x86\crt\src\stdargv.c:142]
#1 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:132]
#2 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#3 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#4 ntdll.dll!LdrpCallInitRoutine
#5 ntdll.dll!LdrpRunInitializeRoutines
#6 ntdll.dll!LdrpLoadDll
#7 ntdll.dll!LdrLoadDll
#8 KERNELBASE.dll!LoadLibraryExW
#9 KERNELBASE.dll!LoadLibraryExA
#10 KERNEL32.dll!LoadLibraryA
#11 main [e:\src\drmemory\git\src\tests\unload.c:43]
Error `#21`: UNADDRESSABLE ACCESS: writing 0x0124084c-0x01240850 4 byte(s)
#0 unloadlibMTd.dll!_initptd [f:\dd\vctools\crt_bld\self_x86\crt\src\tidtable.c:495]
#1 unloadlibMTd.dll!_mtinit [f:\dd\vctools\crt_bld\self_x86\crt\src\tidtable.c:405]
#2 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:109]
#3 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#4 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#5 ntdll.dll!LdrpCallInitRoutine
#6 ntdll.dll!LdrpRunInitializeRoutines
#7 ntdll.dll!LdrpLoadDll
#8 ntdll.dll!LdrLoadDll
#9 KERNELBASE.dll!LoadLibraryExW
#10 KERNELBASE.dll!LoadLibraryExA
#11 KERNEL32.dll!LoadLibraryA
Note: @0:00:03.198 in thread 4876
Note: prev lower malloc: 0x012407f0-0x012407f1
Note: instruction: mov $0x70c281b8 -> 0x5c(%eax)
Error `#30`: UNADDRESSABLE ACCESS: writing 0x012407f1-0x012407f4 3 byte(s) within 0x012407f0-0x012407f4
#0 unloadlibMTd.dll!_mtinit [f:\dd\vctools\crt_bld\self_x86\crt\src\tidtable.c:407]
#1 unloadlibMTd.dll!_CRT_INIT [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:109]
#2 unloadlibMTd.dll!__DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:312]
#3 unloadlibMTd.dll!_DllMainCRTStartup [f:\dd\vctools\crt_bld\self_x86\crt\src\dllcrt0.c:281]
#4 ntdll.dll!LdrpCallInitRoutine
#5 ntdll.dll!LdrpRunInitializeRoutines
#6 ntdll.dll!LdrpLoadDll
#7 ntdll.dll!LdrLoadDll
#8 KERNELBASE.dll!LoadLibraryExW
#9 KERNELBASE.dll!LoadLibraryExA
#10 KERNEL32.dll!LoadLibraryA
#11 main [e:\src\drmemory\git\src\tests\unload.c:43]
Note: @0:00:03.230 in thread 4876
Note: refers to 1 byte(s) beyond last valid byte in prior malloc
Note: prev lower malloc: 0x012407f0-0x012407f1
Note: instruction: mov %eax -> (%ecx)
etc.
_Original issue: http://code.google.com/p/drmemory/issues/detail?id=814_
Contributor guide
Assessment
This issue has not been assessed yet.