Skip to contentSkip to conversation

New: Current libglib2.mk creates broken libglib2 binary when using glibc 2.26

Buildroot bugzilla at busybox.net 1 participant 5 messages Feb 1, 2018 – Feb 25, 2018

lore
Share & tools
lore
#0 lore raw

https://bugs.busybox.net/show_bug.cgi?id=10726

Bug ID: 10726
Summary: Current libglib2.mk creates broken libglib2 binary
when using glibc 2.26
Product: buildroot
Version: 2017.11.2
Hardware: Other
OS: Linux
Status: NEW
Severity: normal
Priority: P5
Component: Other
Assignee: unassigned at buildroot.uclibc.org
Reporter: porto.rio at gmx.net
CC: buildroot at uclibc.org
Target Milestone: ---

We recently ran into a weird problem where the udisks-daemon crashes at startup when migrating from buildroot 2017.08 to 2017.11.

Debugging the issue yielded the following problem:
? udisks tries to call g_io_channel_new_file ("/proc/mdstat", "r", &error); which fails because "/proc/mdstat" does not exists (see build/libglib2-2.54.2/glib/giounix.c:527).
? libglib2 then tries to create an error string using g_strerror() (see build/libglib2-2.54.2/glib/gstrfuncs.c)
? g_error() uses strerror_r() to acquire the error string but discards the returned string (see build/libglib2-2.54.2/glib/gstrfuncs.c:1293).

BR 2017.11 uses libglib2-2.54.2 (BR 2017.08 used 2.52.2) which changed the detection of the available variant of strerror_r() (returning the message vs. filling a buffer) in the c-library (see build/libglib2-2.54.2/glib/gstrfuncs.c).

Old check in libglib2-2.52.2,:
# if defined(__GLIBC__) && !((_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >=
600) && ! _GNU_SOURCE)

New check in libglib2-2.54.2:
# if defined(STRERROR_R_CHAR_P)

The 2.54.2 version relies on a configure-time check to determine if strerror_r() returns the error message or fills the provided buffer with the message.
STRERROR_R_CHAR_P needs to be defined for the current version of glibc (2.26) but is set to undefined in the current makefile for libglib2 in Buildroot. See buildroot-2017.11.2/package/libglib2/libglib2.mk. It contains LIBGLIB2_CONF_ENV which sets "ac_cv_have_decl_strerror_r=yes ac_cv_func_strerror_r_char_p=no".
If these two lines are removed the resulting libglib2 binary works again as the configure script selects the right variant of strerror_r().

Signature · 2 lines
You are receiving this mail because:
You are on the CC list for the bug.
#1 lore raw

[Buildroot] [Bug 10726] Current libglib2.mk creates broken libglib2 binary when using glibc 2.26

https://bugs.busybox.net/show_bug.cgi?id=10726

--- Comment #1 from Matthias <[email protected]> ---
Please find attached a buildroot-config for a minimal qemu image which reproduces the problem.
It was created and tested with the sequence below.

Quoted 4 lines

cd tmp/
tar xvf ../dl/buildroot-2017.11.2.tar.bz2
make qemu_arm_versatile_defconfig
make menuconfig

[activate eudev, glibc and udisks]

Quoted 2 lines

make
qemu-system-arm -M versatilepb -kernel output/images/zImage -dtb output/images/versatile-pb.dtb -drive file=output/images/rootfs.ext2,if=scsi,format=raw -append "root=/dev/sda console=ttyAMA0,115200" -serial stdio -net nic,model=rtl8139 -net user

# /usr/libexec/udisks-daemon 
Invalid byte sequence in conversion input

(udisks-daemon:112): GLib-CRITICAL **: g_error_new_literal: assertion 'message != NULL' failed
Segmentation fault

Signature · 2 lines
You are receiving this mail because:
You are on the CC list for the bug.
#2 lore raw

[Buildroot] [Bug 10726] Current libglib2.mk creates broken libglib2 binary when using glibc 2.26

In reply to bugzilla at busybox.net

https://bugs.busybox.net/show_bug.cgi?id=10726

--- Comment #2 from Matthias <[email protected]> --- Created attachment 7451
--> https://bugs.busybox.net/attachment.cgi?id=7451&action=edit
buildroot-config for a minimal qemu image which reproduces the problem

Note: Comments were removed by 'grep -v "# BR2_" .config >glib-error_defconfig' to reduce size.

Signature · 2 lines
You are receiving this mail because:
You are on the CC list for the bug.
#3 lore raw

[Buildroot] [Bug 10726] Current libglib2.mk creates broken libglib2 binary when using glibc 2.26

In reply to bugzilla at busybox.net

https://bugs.busybox.net/show_bug.cgi?id=10726

--- Comment #3 from Thomas Petazzoni <[email protected]> --- Thanks for your well-documented bug report!

I think all those pre-seeded cache variables in LIBGLIB2_CONF_ENV are just crap. They have been there since the glib2 package was introduced back in January 2007, and the vast majority of them are useless, and potentially harmful (as you have discovered). So the fix is most likely to remove almost all of them, the key being to identify which ones we need to keep.

Signature · 2 lines
You are receiving this mail because:
You are on the CC list for the bug.
#4 lore raw

[Buildroot] [Bug 10726] Current libglib2.mk creates broken libglib2 binary when using glibc 2.26

In reply to bugzilla at busybox.net

https://bugs.busybox.net/show_bug.cgi?id=10726

Thomas Petazzoni <[email protected]> changed:

What |Removed |Added
----------------------------------------------------------------------------

         Resolution|---                         |FIXED
             Status|NEW                         |RESOLVED

--- Comment #4 from Thomas Petazzoni <[email protected]> --- Fixed by
https://git.buildroot.org/buildroot/commit/?id=eb1a45f4c1e01fa1af7ad3dbbd6b2bade7fc958d.
Thanks!

Signature · 2 lines
You are receiving this mail because:
You are on the CC list for the bug.