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

Miguel de Icaza miguel at xamarin.com
Thu Oct 22 16:08:54 UTC 2015


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 <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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/mono-devel-list/attachments/20151022/1b9c4e6b/attachment-0001.html>


More information about the Mono-devel-list mailing list