[Mono-dev] malloc error executing OBS-built mono

Greg Young gregoryyoung1 at gmail.com
Fri Oct 23 12:01:30 UTC 2015


You will need to grab the valgrind suppression file as well.

https://github.com/mono/mono/blob/master/data/mono.supp

http://www.mono-project.com/docs/debug+profile/debug/

HTH,

Greg

On Thu, Oct 22, 2015 at 7:08 PM, Miguel de Icaza <miguel at xamarin.com> wrote:
> Hello,
>
> Well, the great news is that this happens without involving the JIT or GC -
> it happens just at startup, so this is a plain-old C bug.
>
> Your best bet is now to run this with Valgrind and see what it tells you.
>
> On Thu, Oct 22, 2015 at 12:04 PM, Miguel González
> <mgonzalez at codicesoftware.com> wrote:
>>
>> I executed a sample command (gacutils.exe -l) under gdb to see the trace
>> at the time of the crash.
>>
>>
>>
>> This is the backtrace as returned by gdb:
>>
>>
>>
>> Program received signal SIGABRT, Aborted.
>>
>> 0xf7e1b245 in raise () from /lib/libc.so.6
>>
>> #0  0xf7e1b245 in raise () from /lib/libc.so.6
>>
>> #1  0xf7e1cac3 in abort () from /lib/libc.so.6
>>
>> #2  0xf7e635cb in malloc_printerr () from /lib/libc.so.6
>>
>> #3  0xf7e63aec in top_check () from /lib/libc.so.6
>>
>> #4  0xf7e65b13 in malloc_check () from /lib/libc.so.6
>>
>> #5  0xf7e66c45 in malloc () from /lib/libc.so.6
>>
>> #6  0xf7e6b071 in strdup () from /lib/libc.so.6
>>
>> #7  0x0827d54c in monoeg_g_strsplit ()
>>
>> #8  0x081b70a5 in arch_matches ()
>>
>> #9  0x081b70fa in arch_matches ()
>>
>> #10 0x081b7770 in dllmap_start ()
>>
>> #11 0x08283f42 in monoeg_g_markup_parse_context_parse ()
>>
>> #12 0x081b6e38 in mono_config_parse_xml_with_context ()
>>
>> #13 0x081b6f6d in mono_config_parse_file_with_context ()
>>
>> #14 0x081b6fd7 in mono_config_parse_file ()
>>
>> #15 0x081b808c in mono_config_parse ()
>>
>> #16 0x080c1449 in mono_main ()
>>
>> #17 0x08065e52 in main ()
>>
>>
>>
>> It seems to be failing when the /etc/mono/config file is loaded. This is
>> the config file contents. The zlib line has been manually added to the code
>> retrieved from GitHub.
>>
>> <configuration>
>>
>>    <dllmap dll="i:cygwin1.dll" target="libc.so.6" os="!windows" />
>>
>>    <dllmap dll="libc" target="libc.so.6" os="!windows"/>
>>
>>    <dllmap dll="intl" target="libc.so.6" os="!windows"/>
>>
>>    <dllmap dll="intl" name="bind_textdomain_codeset" target="libc.so.6"
>> os="solaris"/>
>>
>>    <dllmap dll="libintl" name="bind_textdomain_codeset" target="libc.so.6"
>> os="solaris"/>
>>
>>    <dllmap dll="libintl" target="libc.so.6" os="!windows"/>
>>
>>    <dllmap dll="i:libxslt.dll" target="libxslt.so" os="!windows"/>
>>
>>    <dllmap dll="i:odbc32.dll" target="libodbc.so" os="!windows"/>
>>
>>    <dllmap dll="i:odbc32.dll" target="libiodbc.dylib" os="osx"/>
>>
>>    <dllmap dll="oci" target="libclntsh.so" os="!windows"/>
>>
>>    <dllmap dll="db2cli" target="libdb2_36.so" os="!windows"/>
>>
>>    <dllmap dll="MonoPosixHelper"
>> target="$mono_libdir/libMonoPosixHelper.so" os="!windows" />
>>
>>    <dllmap dll="i:msvcrt" target="libc.so.6" os="!windows"/>
>>
>>    <dllmap dll="i:msvcrt.dll" target="libc.so.6" os="!windows"/>
>>
>>    <dllmap dll="sqlite" target="libsqlite.so.0" os="!windows"/>
>>
>>    <dllmap dll="sqlite3" target="libsqlite3.so.0" os="!windows"/>
>>
>>    <dllmap dll="libX11" target="libX11.so.6" os="!windows" />
>>
>>    <dllmap dll="libgdk-x11-2.0" target="libgdk-x11-2.0.so.0"
>> os="!windows"/>
>>
>>    <dllmap dll="libgtk-x11-2.0" target="libgtk-x11-2.0.so.0"
>> os="!windows"/>
>>
>>    <dllmap dll="libXinerama" target="libXinerama.so.1" os="!windows" />
>>
>>    <dllmap dll="libcairo-2.dll" target="libcairo.so.2" os="!windows"/>
>>
>>    <dllmap dll="libcairo-2.dll" target="libcairo.2.dylib" os="osx"/>
>>
>>    <dllmap dll="libcups" target="libcups.so.2" os="!windows"/>
>>
>>    <dllmap dll="libcups" target="libcups.dylib" os="osx"/>
>>
>>    <dllmap dll="i:kernel32.dll">
>>
>>        <dllentry dll="__Internal" name="CopyMemory"
>> target="mono_win32_compat_CopyMemory"/>
>>
>>        <dllentry dll="__Internal" name="FillMemory"
>> target="mono_win32_compat_FillMemory"/>
>>
>>        <dllentry dll="__Internal" name="MoveMemory"
>> target="mono_win32_compat_MoveMemory"/>
>>
>>        <dllentry dll="__Internal" name="ZeroMemory"
>> target="mono_win32_compat_ZeroMemory"/>
>>
>>    </dllmap>
>>
>>    <dllmap dll="gdiplus" target="libgdiplus.so" os="!windows"/>
>>
>>    <dllmap dll="gdiplus.dll" target="libgdiplus.so"  os="!windows"/>
>>
>>    <dllmap dll="gdi32" target="libgdiplus.so" os="!windows"/>
>>
>>    <dllmap dll="gdi32.dll" target="libgdiplus.so" os="!windows"/>
>>
>>    <dllmap dll="z" target="libz.so.1" os="!windows" />
>>
>> </configuration>
>>
>>
>>
>> Anyway, as I mentioned, we’re putting the openSUSE 12.3 build aside. We’ve
>> noticed that openSUSE 12.3, 13.1 and 13.2 can work with our openSUSE 12.2
>> repository.
>>
>>
>>
>> Miguel
>>
>>
>>
>> From: mono-devel-list-bounces at lists.ximian.com
>> [mailto:mono-devel-list-bounces at lists.ximian.com] On Behalf Of Miguel
>> González
>> Sent: 22 October 2015 10:49
>> To: Miguel de Icaza <miguel at xamarin.com>
>>
>>
>> Cc: mono-devel-list at lists.ximian.com
>> Subject: Re: [Mono-dev] malloc error executing OBS-built mono
>>
>>
>>
>> Hi Miguel,
>>
>>
>>
>> Thanks for the update :-) I had also an e-mail from Zoltan Varga yesterday
>> telling me that the change had been applied. I updated my code accordingly
>> to see if that could be the fix for my issue, too… But it didn’t :-(
>>
>>
>>
>> I’ll try using gdb as you suggested. I hadn’t considered it before since
>> this crash only happens inside the automated build of the OBS worker virtual
>> machine and I’ve not been able to reproduce in any other environment.
>> However, any additional info is always appreciated! There are also chances
>> of ditching this build and relying on other distros to build our packages,
>> since our OpenSUSE packages seem to be highly compatible between versions.
>>
>>
>>
>> Thank you,
>>
>>
>>
>> Miguel
>>
>>
>>
>> From: Miguel de Icaza [mailto:miguel at xamarin.com]
>> Sent: 21 October 2015 20:44
>> To: Miguel González <mgonzalez at codicesoftware.com>
>> Cc: mono-devel-list at lists.ximian.com
>> Subject: Re: [Mono-dev] malloc error executing OBS-built mono
>>
>>
>>
>> Hello Miguel,
>>
>>
>>
>> I also had to apply this change in order to avoid an unallowed warning
>> message:
>>
>> I: Statement might be overflowing a buffer in strncat. Common mistake:
>>
>>    BAD: strncat(buffer,charptr,sizeof(buffer)) is wrong, it takes the
>>
>>    left over size as 3rd argument
>>
>>    GOOD: strncat(buffer,charptr,sizeof(buffer)-strlen(buffer)-1)
>>
>>
>>
>> We replaced that code with the glib string operations just yesterday:
>>
>>
>>
>> 042ddd504c09977682bb48010c5642390826d1da
>>
>>
>>
>> But thanks for sharing.
>>
>>
>>
>> At this point I’m able to build mono RPM packages and they’re working as I
>> install them using a test OpenSUSE 12.3 virtual machine. However, when the
>> GTK# builds are started –which use the mono packages as build requirement–,
>> the worker is unable to run the mono executable: apparently, malloc is
>> corrupting the heap or something. This is a sample execution as extracted
>> from the OBS build logs:
>>
>> [  101s] + /opt/plasticscm5/mono/bin/mono
>> /opt/plasticscm5/mono/lib/mono/4.5/gacutil.exe -l
>>
>> [  101s] *** Error in `/opt/plasticscm5/mono/bin/mono': malloc: top chunk
>> is corrupt: 0x08ab9230 ***
>>
>>
>>
>> What you want to do at this point in time is to run the process under gdb,
>> as this will show where malloc detected the error, and then you should get
>> both the unmanaged stack trace, and if possible the managed one (with the
>> mono_stack gdb macro)
>>
>>
>>
>> Miguel.
>
>
>
> _______________________________________________
> Mono-devel-list mailing list
> Mono-devel-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-devel-list
>



-- 
Studying for the Turing test


More information about the Mono-devel-list mailing list