Bug 1786775

Summary: segfault in yaml when starting the calamares installer
Product: [Fedora] Fedora Reporter: Joel Stienlet <j.stienlet>
Component: calamaresAssignee: Guido Grazioli <guido.grazioli>
Status: CLOSED CURRENTRELEASE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 31CC: damianatorrpm, guido.grazioli, hobbes1069, j.stienlet, kevin, mattia.verga, me, thofmann
Target Milestone: ---   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2020-04-21 13:18:18 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Joel Stienlet 2019-12-27 22:18:34 UTC
Description of problem:
The calamares installer crashes right from start on Fedora-Workstation-Live-x86_64-31-1.9.iso

Version-Release number of selected component (if applicable): fedora31 workstation live dvd x64

How reproducible: always

Steps to Reproduce:
1. dnf -y install calamares
2. click on gnome calamares installer icon
3. journalctl shows a segfault


Additional info: gdb output follows.
It looks like the actual problem is in the yaml library,
called L216 of:
https://github.com/calamares/calamares/blob/master/src/libcalamares/Settings.cpp 
by config[ "modules-search" ] apparently (not sure!).
I would expect the yaml library to raise an exception, not to crash.
Note that "/usr/share/calamares/settings.conf" should be the file loaded and passed to YAML::Load().
So it looks to me that the actual problem is in the YAML library, and I reported this bug as such.

results of:
gdb --args calamares -D 8
 
 (gdb) run
Starting program: /usr/bin/calamares -D 8
Missing separate debuginfos, use: dnf debuginfo-install glibc-2.30-5.fc31.x86_64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
[New Thread 0x7fffe56cd700 (LWP 3491)]
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
21:41:24 [6]: Using log file: "/root/.cache/calamares/session.log" 
21:41:24 [6]: Calamares version: 3.2.11 
21:41:24 [6]:         languages: "ar, ast, bg, ca, cs_CZ, da, de, el, en, en_GB, es, es_MX, es_PR, et, eu, fi_FI, fr, gl, he, hi, hr, hu, id, is, it_IT, ja, ko, lt, mr, nb, nl, pl, pt_BR, pt_PT, ro, ru, sk, sl, sq, sr, sr@latin, sv, th, tr_TR, uk, zh_CN, zh_TW" 
21:41:24 [6]: Using Calamares QML directory "/usr/share/calamares/qml" 
21:41:24 [6]: Using Calamares settings file at "/usr/share/calamares/settings.conf" 

Thread 1 "calamares" received signal SIGSEGV, Segmentation fault.
0x00007ffff7ebd97b in std::__shared_ptr_access<YAML::detail::node_data, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get (this=0x3)
    at /usr/include/c++/9/bits/shared_ptr_base.h:1020
1020	/usr/include/c++/9/bits/shared_ptr_base.h: No such file or directory.
Missing separate debuginfos, use: dnf debuginfo-install boost-python3-1.69.0-9.fc31.x86_64 bzip2-libs-1.0.8-1.fc31.x86_64 dbus-libs-1.12.16-3.fc31.x86_64 expat-2.2.8-1.fc31.x86_64 fontconfig-2.13.92-3.fc31.x86_64 freetype-2.10.0-3.fc31.x86_64 glib2-2.62.1-1.fc31.x86_64 graphite2-1.3.13-1.fc31.x86_64 harfbuzz-2.6.1-2.fc31.x86_64 kf5-kcoreaddons-5.64.0-1.fc31.x86_64 kf5-kcrash-5.64.0-1.fc31.x86_64 kf5-kwindowsystem-5.64.0-1.fc31.x86_64 libICE-1.0.10-2.fc31.x86_64 libSM-1.2.3-4.fc31.x86_64 libX11-1.6.8-3.fc31.x86_64 libX11-xcb-1.6.8-3.fc31.x86_64 libXau-1.0.9-2.fc31.x86_64 libXcursor-1.1.15-6.fc31.x86_64 libXext-1.3.4-2.fc31.x86_64 libXfixes-5.0.3-10.fc31.x86_64 libXrender-0.9.10-10.fc31.x86_64 libgcc-9.2.1-1.fc31.x86_64 libgcrypt-1.8.5-1.fc31.x86_64 libglvnd-1.1.1-5.fc31.x86_64 libglvnd-glx-1.1.1-5.fc31.x86_64 libgpg-error-1.36-2.fc31.x86_64 libicu-63.2-3.fc31.x86_64 libpng-1.6.37-2.fc31.x86_64 libstdc++-9.2.1-1.fc31.x86_64 libuuid-2.34-3.fc31.x86_64 libxcb-1.13.1-3.fc31.x86_64 libxkbcommon-0.8.4-2.fc31.x86_64 libxkbcommon-x11-0.8.4-2.fc31.x86_64 lz4-libs-1.9.1-1.fc31.x86_64 openssl-libs-1.1.1d-2.fc31.x86_64 pcre-8.43-2.fc31.1.x86_64 pcre2-utf16-10.33-14.fc31.x86_64 python3-libs-3.7.4-5.fc31.x86_64 qt5-qtbase-5.12.5-1.fc31.x86_64 qt5-qtbase-gui-5.12.5-1.fc31.x86_64 qt5-qtdeclarative-5.12.5-1.fc31.x86_64 qt5-qtsvg-5.12.5-1.fc31.x86_64 qt5-qtx11extras-5.12.5-1.fc31.x86_64 sssd-client-2.2.2-1.fc31.x86_64 systemd-libs-243-4.gitef67743.fc31.x86_64 xcb-util-image-0.4.0-13.fc31.x86_64 xcb-util-keysyms-0.4.0-11.fc31.x86_64 xz-libs-5.2.4-6.fc31.x86_64 zlib-1.2.11-19.fc31.x86_64
(gdb) bt
#0  0x00007ffff7ebd97b in std::__shared_ptr_access<YAML::detail::node_data, (__gnu_cxx::_Lock_policy)2, false, false>::_M_get (this=0x3)
    at /usr/include/c++/9/bits/shared_ptr_base.h:1020
#1  std::__shared_ptr_access<YAML::detail::node_data, (__gnu_cxx::_Lock_policy)2, false, false>::operator-> (this=0x3)
    at /usr/include/c++/9/bits/shared_ptr_base.h:1015
#2  YAML::detail::node_ref::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (pMemory=..., key="modules-search", this=0x3)
    at /usr/include/yaml-cpp/node/detail/node_ref.h:68
#3  YAML::detail::node::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > (pMemory=..., key="modules-search", 
    this=0x7fffffffd600) at /usr/include/yaml-cpp/node/detail/node.h:129
#4  YAML::Node::operator[]<char [15]> (key=<synthetic pointer>..., this=0x7fffffffd660) at /usr/include/yaml-cpp/node/impl.h:390
#5  Calamares::Settings::Settings (this=0x5555557841a0, settingsFilePath=..., debugMode=<optimized out>, parent=<optimized out>)
    at /usr/src/debug/calamares-3.2.11-2.fc31.x86_64/src/libcalamares/Settings.cpp:201
#6  0x000055555556a99e in CalamaresApplication::initSettings (this=0x7fffffffd950)
    at /usr/src/debug/calamares-3.2.11-2.fc31.x86_64/src/calamares/CalamaresApplication.cpp:281
#7  0x000055555556c139 in CalamaresApplication::init (this=0x7fffffffd950)
    at /usr/src/debug/calamares-3.2.11-2.fc31.x86_64/src/calamares/CalamaresApplication.cpp:77
#8  0x0000555555566726 in main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/calamares-3.2.11-2.fc31.x86_64/src/calamares/main.cpp:120
(gdb)

Comment 1 Joel Stienlet 2019-12-28 16:30:57 UTC
Hello,
I recompiled calamares from source with the source RPM. That worked: calamares started without segfault.
It doesn't explain what's wrong with the packaged version though (perhaps wrong yaml headers??).
Anyway I think the bug should be assigned to "calamares" instead of "yaml-cpp" now.

Comment 2 Kevin Kofler 2019-12-28 17:25:26 UTC
Looks like some silent binary incompatibility (ABI breakage) in yaml-cpp. More precisely, it looks like the binary layout of some object class in yaml-cpp has changed, while the soname remained the same. So this is only caught at runtime.

Comment 3 Richard Shaw 2020-04-21 13:18:18 UTC
Calamares has been rebuilt in 2020 so I'm going to assume this is fixed. Please reopen if that's not the case.