All of lore.kernel.org
 help / color / mirror / Atom feed
From: bugzilla at busybox.net <bugzilla@busybox.net>
To: buildroot@busybox.net
Subject: [Buildroot] [Bug 11346] New: qt5base-5.11.1 Assertion failed: ret == 0 after getentropy() inside fillBuffer() on arm
Date: Wed, 12 Sep 2018 10:10:57 +0000	[thread overview]
Message-ID: <bug-11346-163@https.bugs.busybox.net/> (raw)

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

            Bug ID: 11346
           Summary: qt5base-5.11.1 Assertion failed: ret == 0 after
                    getentropy() inside fillBuffer() on arm
           Product: buildroot
           Version: unspecified
          Hardware: Other
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P5
         Component: Other
          Assignee: unassigned at buildroot.uclibc.org
          Reporter: richterphilipp.pops at gmail.com
                CC: buildroot at uclibc.org
  Target Milestone: ---

Created attachment 7781
  --> https://bugs.busybox.net/attachment.cgi?id=7781&action=edit
Config file used to build

Hello,

I noticed while trying to run qbittorrent-nox on arm there was an assertion
failure in qt5base.
First there's a SIGILL in _armv7_tick () in OPENSSL_cpuid_setup () that is
handled.
And then there's the assertion failure Assertion failed: ret == 0 in
src/corelib/global/qrandom.cpp
Which looks like this :

###################
# BEGIN qrandom.cpp
###################
...
struct QRandomGenerator::SystemGenerator
{
#if QT_CONFIG(getentropy)
    static qsizetype fillBuffer(void *buffer, qsizetype count) Q_DECL_NOTHROW
    {
        // getentropy can read at most 256 bytes, so break the reading
        qsizetype read = 0;
        while (count - read > 256) {
            // getentropy can't fail under normal circumstances
            int ret = getentropy(reinterpret_cast<uchar *>(buffer) + read,
256);
            Q_ASSERT(ret == 0);
            Q_UNUSED(ret);
            read += 256;
        }

        int ret = getentropy(reinterpret_cast<uchar *>(buffer) + read, count -
read);
        Q_ASSERT(ret == 0);
        Q_UNUSED(ret);
        return count;
    }

#elif defined(Q_OS_UNIX)
...
#################
# END qrandom.cpp
#################

The debug log looks like follows:

#########
# BEGIN gdb log
#########
Starting program: /usr/bin/qbittorrent-nox 

Program received signal SIGILL, Illegal instruction.
_armv7_tick () at armv4cpuid.S:94
94      armv4cpuid.S: No such file or directory.
#0  _armv7_tick () at armv4cpuid.S:94
No locals.
#1  0xb5fb7b48 in OPENSSL_cpuid_setup () at armcap.c:157
        e = <optimized out>
        ill_oact = {__sa_handler = {sa_handler = 0x0, sa_sigaction = 0x0},
sa_mask = {__bits = {0, 0, 0, 74636, 832, 8, 17, 0, 0, 75468, 0, 0, 0, 0, 0, 0,
0, 0, 3201457664, 3069381184, 3068977088, 3069646984, 10370172, 0, 40, 696320,
244, 56704, 25936, 0, 0, 
              0}}, sa_flags = 0, sa_restorer = 0x10}
        ill_act = {__sa_handler = {sa_handler = 0xb5fb77a0 <ill_handler>,
sa_sigaction = 0xb5fb77a0 <ill_handler>}, sa_mask = {__bits = {2147482407,
4294967292, 0 <repeats 30 times>}}, sa_flags = 0, sa_restorer = 0x0}
        oset = {__bits = {0, 0, 3068948480, 0, 453196, 0, 8080, 8080, 65534,
65534, 3201457888, 635095, 100, 0, 0, 0, 0, 0, 0, 0, 3201457872, 0, 0, 0, 0, 0,
3201458147, 3068979056, 3069646984, 0, 0, 3201457396}}
        trigger = 1
#2  0xb6f2e558 in do_init_fini (p=0xb600c660) at ldso/dynlink.c:1310
        n = 0
        fn = 0xb5ff55d8
        dyn = {513768574, 79894, 888, 1597440, 244, 138796, 70716, 0, 0, 0,
79974, 16, 286396, 1290996, 79955, 0, 0, 218772, 66736, 8, 17, 0, 0, 285508, 0,
1541588, 1541596, 8, 4, 0, 0, 0}
        need_locking = 0
#3  0xb6f30838 in __libc_start_init () at ldso/dynlink.c:1322
No locals.
#4  0xb6eeeeec in __libc_start_main (main=0x69a28 <main(int, char**)>, argc=1,
argv=0xbed25e04) at src/env/__libc_start_main.c:73
        envp = 0xbed25e0c
#5  0x0006eaa8 in _start_c (p=<optimized out>) at crt/crt1.c:17
        argc = <optimized out>
        argv = <optimized out>
#6  0x0006ea6c in _start () at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/qt5/QtCore/qscopedpointer.h:104
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Dump of assembler code for function _start_c:
   0x0006ea70 <+0>:     push    {lr}            ; (str lr, [sp, #-4]!)
   0x0006ea74 <+4>:     sub     sp, sp, #12
   0x0006ea78 <+8>:     mov     r2, r0
   0x0006ea7c <+12>:    ldr     r1, [r2], #4
   0x0006ea80 <+16>:    mov     r3, #0
   0x0006ea84 <+20>:    str     r3, [sp, #4]
   0x0006ea88 <+24>:    movw    r3, #2252       ; 0x8cc
   0x0006ea8c <+28>:    movt    r3, #30
   0x0006ea90 <+32>:    str     r3, [sp]
   0x0006ea94 <+36>:    movw    r3, #17168      ; 0x4310
   0x0006ea98 <+40>:    movt    r3, #6
   0x0006ea9c <+44>:    movw    r0, #39464      ; 0x9a28
   0x0006eaa0 <+48>:    movt    r0, #6
   0x0006eaa4 <+52>:    bl      0x652a8 <__libc_start_main@plt>
End of assembler dump.
Saved corefile qbittorrent-nox.openssl.core
Continuing.

Program received signal SIGABRT, Aborted.
__restore_sigs (set=set at entry=0xbed2580c) at ./arch/arm/syscall_arch.h:75
75      ./arch/arm/syscall_arch.h: No such file or directory.
#0  __restore_sigs (set=set at entry=0xbed2580c) at ./arch/arm/syscall_arch.h:75
No locals.
#1  0xb6f15a00 in raise (sig=sig at entry=6) at src/signal/raise.c:11
        set = {__bits = {0, 0, 1936, 0, 3069644800, 6, 851725401, 5,
3069646368, 632, 39, 3069645736, 1702064961, 1869182066, 1634082926,
1684368489, 1701978170, 1027416180, 673198112, 1651469415, 1898933345,
1684955506, 1663987055, 540700784, 1819044198, 
            1717990722, 540701285, 691025201, 3061346314, 4, 0, 3069644800}}
        ret = 0
#2  0xb6eef600 in abort () at src/exit/abort.c:14
No locals.
#3  0xb6eef6e4 in __assert_fail (expr=<optimized out>, file=<optimized out>,
line=line at entry=150, func=<optimized out>) at src/exit/assert.c:8
No locals.
#4  0xb62b1304 in QRandomGenerator::SystemGenerator::fillBuffer
(count=<optimized out>, buffer=<optimized out>) at global/qrandom.cpp:376
        read = 0
        ret = <optimized out>
        __func__ = "fillBuffer"
#5  QRandomGenerator::SystemGenerator::generate (this=<optimized out>,
begin=0xbed25920, end=<optimized out>) at global/qrandom.cpp:373
        bytesFilled = <optimized out>
        buffer = 0xbed25920
        count = 1
        filled = 0
#6  0xb62b1cd0 in QRandomGenerator::_fillRange (this=0xb678ae84
<QRandomGenerator::SystemAndGlobalGenerators::self()::g+4>, buffer=0xbed25920,
buffer at entry=0xbed25918, bufferEnd=0xbed25924, bufferEnd at entry=0xbed2591c) at
global/qrandom.cpp:1273
        __func__ = "_fillRange"
        begin = 0xbed25920
        end = 0xbed25924
#7  0xb62fc9c8 in QRandomGenerator::fillRange<unsigned int, true> (count=1,
buffer=0xbed25918, this=<optimized out>) at global/qrandom.h:141
No locals.
#8  QRandomGenerator::generate (this=<optimized out>) at global/qrandom.h:87
        ret = 16
#9  qt_create_qhash_seed () at tools/qhash.cpp:299
        seed = 0
        envSeed = {d = 0xb65ae3ac <QArrayData::shared_null>}
#10 0xb62fcafc in qt_initialize_qhash_seed () at tools/qhash.cpp:325
        x = <optimized out>
#11 0xb62fd290 in QHashData::detach_helper (this=0xb65b0010
<QHashData::shared_null>, node_duplicate=0xb19e8 <QHash<QString,
QHashDummyValue>::duplicateNode(QHashData::Node*, void*)>, 
    node_delete=0xb62fd290 <QHashData::detach_helper(void (*)(QHashData::Node*,
void*), void (*)(QHashData::Node*), int, int)+220>, node_delete at entry=0x77b28
<QHash<QString, QHashDummyValue>::deleteNode2(QHashData::Node*)>,
nodeSize=nodeSize at entry=12, 
    nodeAlign=nodeAlign at entry=4) at tools/qhash.cpp:502
No locals.
#12 0x0006d1b4 in QHash<QString, QHashDummyValue>::detach_helper
(this=0xbed25984) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/qt5/QtCore/qhash.h:595
        x = <optimized out>
#13 QHash<QString, QHashDummyValue>::detach (this=0xbed25984) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/qt5/QtCore/qhash.h:275
No locals.
#14 QHash<QString, QHashDummyValue>::insert (avalue=..., akey=...,
this=0xbed25984) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/qt5/QtCore/qhash.h:769
        h = <optimized out>
        node = <optimized out>
#15 QSet<QString>::insert (value=..., this=0xbed25984) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/qt5/QtCore/qset.h:205
No locals.
#16 QSet<QString>::operator<< (value=..., this=0xbed25984) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/qt5/QtCore/qset.h:226
No locals.
#17 __static_initialization_and_destruction_0 (__priority=65535,
__initialize_p=1) at base/torrentfilter.cpp:34
No locals.
#18 _GLOBAL__sub_I_torrentfilter.cpp(void) ()@base/torrentfilter.cpp:192
No locals.
#19 0xb6f2e558 in do_init_fini (p=0xb6f717c0 <app>, p at entry=0xb6f319b8
<dlopen+644>) at ldso/dynlink.c:1310
        n = 13
        fn = 0x5e10f4
        dyn = {515783806, 50596, 9360, 6172672, 65900, 193264, 121808, 0, 0, 0,
197883, 16, 410384, 1968332, 0, 0, 0, 400368, 656, 8, 17, 3069653228, 0,
401024, 0, 6164616, 6164780, 164, 144, 0, 0, 0}
        need_locking = 0
#20 0xb6f319b8 in dlopen (file=0xb600c920 "", file at entry=0xb61fe6d0 "libz.so",
mode=0) at ldso/dynlink.c:1858
        p = 0x5e5020
        orig_tail = 0xb6f319b8 <dlopen+644>
        orig_syms_tail = 0xb600c920
        orig_lazy_head = 0xb6e9de94
        next = <optimized out>
        orig_tls_tail = 0x2
        orig_tls_cnt = 3055544016
        orig_tls_offset = 0
        orig_tls_align = 3
        i = <optimized out>
        cs = 0
        jb = {{__jb = {13123461070452686850, 1, 6205344, 0,
13182906960083835512, 0, 0, 0, 0, 0, 0, 0, 0, 13123461622355984383,
13750153770438584952, 13182592032700366848, 9223372001255614167, 0, 0, 0, 0,
13182590469332271104, 13750153475327524864, 0, 0, 0, 
              18446744073709486080, 13750152805312626688, 0, 0, 0, 0}, __fl =
0, __ss = {0, 0, 0, 0, 0, 40, 16, 1, 851725401, 3069653356, 3055544016, 1, 0,
3055543888, 3069311476, 3069653356, 3069292984, 3201457152, 851725401,
3055544000, 3055544000, 
              3052565140, 3053283960, 3055544000, 3053503488, 0, 357,
3055544000, 3055543888, 1, 0, 6205344}}}
        first_load = <optimized out>
#21 0xb5f27624 in dlfcn_load (dso=0xb61fe650) at dso_dlfcn.c:185
        ptr = 0x0
        filename = 0xb61fe6d0 "libz.so"
        flags = <optimized out>
#22 0xb5f27f40 in DSO_load (dso=<optimized out>, filename=<optimized out>,
meth=<optimized out>, flags=<optimized out>) at dso_lib.c:232
        ret = 0xb61fe650
        allocated = 1
#23 0xb5f9a648 in COMP_zlib () at c_zlib.c:352
        meth = 0xb6007ab0 <zlib_method_nozlib>
#24 0xb604d6e8 in load_builtin_compressions () at ssl_ciph.c:489
        comp = 0xb61fe630
        got_write_lock = 1
#25 0xb604f7a8 in SSL_COMP_get_compression_methods () at ssl_ciph.c:1962
No locals.
#26 0xb6055e40 in SSL_library_init () at ssl_algs.c:150
No locals.
#27 0xb6a919d0 in boost::asio::ssl::detail::openssl_init_base::do_init::do_init
(this=<optimized out>) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/boost/asio/ssl/detail/impl/openssl_init.ipp:40
No locals.
#28 boost::asio::ssl::detail::openssl_init_base::instance () at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/boost/asio/ssl/detail/impl/openssl_init.ipp:147
        init =
{<std::__shared_ptr<boost::asio::ssl::detail::openssl_init_base::do_init,
(__gnu_cxx::_Lock_policy)2>> =
{<std::__shared_ptr_access<boost::asio::ssl::detail::openssl_init_base::do_init,
(__gnu_cxx::_Lock_policy)2, false, false>> = {<No data fields>}, _M_ptr = 0x0,
_M_refcount = {_M_pi = 0x0}}, <No data fields>}
#29 0xb6a891ec in boost::asio::ssl::detail::openssl_init<true>::openssl_init
(this=0xb6e9bafc <boost::asio::ssl::detail::openssl_init<true>::instance_>) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/boost/asio/detail/noncopyable.hpp:29
No locals.
#30 __static_initialization_and_destruction_0
(__initialize_p=__initialize_p at entry=1, __priority=__priority at entry=65535) at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/boost/asio/ssl/detail/openssl_init.hpp:90
No locals.
#31 0xb6a8f440 in _GLOBAL__sub_I_bt_peer_connection.cpp(void) () at
bt_peer_connection.cpp:3645
No locals.
#32 0xb6f2e558 in do_init_fini (p=0xb6e9d8c0) at ldso/dynlink.c:1310
        n = 102
        fn = 0xb6e89be0
        dyn = {513703038, 212859, 10664, 4935680, 244, 79272, 37880, 0, 0, 0,
213090, 16, 365112, 4299636, 212931, 0, 0, 297728, 56720, 8, 17, 0, 0, 354448,
0, 4910012, 4910460, 448, 368, 0, 0, 0}
        need_locking = 0
#33 0xb6f30838 in __libc_start_init () at ldso/dynlink.c:1322
No locals.
#34 0xb6eeeeec in __libc_start_main (main=0x69a28 <main(int, char**)>, argc=1,
argv=0xbed25e04) at src/env/__libc_start_main.c:73
        envp = 0xbed25e0c
#35 0x0006eaa8 in _start_c (p=<optimized out>) at crt/crt1.c:17
        argc = <optimized out>
        argv = <optimized out>
#36 0x0006ea6c in _start () at
../../../host/arm-buildroot-linux-musleabihf/sysroot/usr/include/boost/asio/detail/noncopyable.hpp:29
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Dump of assembler code for function _start_c:
   0x0006ea70 <+0>:     push    {lr}            ; (str lr, [sp, #-4]!)
   0x0006ea74 <+4>:     sub     sp, sp, #12
   0x0006ea78 <+8>:     mov     r2, r0
   0x0006ea7c <+12>:    ldr     r1, [r2], #4
   0x0006ea80 <+16>:    mov     r3, #0
   0x0006ea84 <+20>:    str     r3, [sp, #4]
   0x0006ea88 <+24>:    movw    r3, #2252       ; 0x8cc
   0x0006ea8c <+28>:    movt    r3, #30
   0x0006ea90 <+32>:    str     r3, [sp]
   0x0006ea94 <+36>:    movw    r3, #17168      ; 0x4310
   0x0006ea98 <+40>:    movt    r3, #6
   0x0006ea9c <+44>:    movw    r0, #39464      ; 0x9a28
   0x0006eaa0 <+48>:    movt    r0, #6
   0x0006eaa4 <+52>:    bl      0x652a8 <__libc_start_main@plt>
End of assembler dump.
Saved corefile qbittorrent-nox.qt5base.core
#############
# END gdb log
#############

Here are links to the rootfs.tar and coredumps that can be used with gdb:
wget https://u.teknik.io/AitQe.xz -O qbittorrent-nox.rootfs.tar.xz
sha256 262cfbb54e32192b070f1acc0e6859bdf3d3ff313983105981b23286a3c66c2c
wget https://u.teknik.io/nQnKu.xz -O qbittorrent-nox.openssl.core.xz
sha256 137d8efa6959bd403ad1fcc48f57186f8b88d0f197da9e2f1ec8d413aa5c844d
wget https://u.teknik.io/tL1Ha.xz -O qbittorrent-nox.qt5base.core.xz
sha256 98c753625af258490c1a8d8585cf067010ed0f620485f5c983b2333e4cc13733
wget https://u.teknik.io/u0Jgl.xz -O config-qbittorrent-nox.xz
sha256 4c84efae0632fcf59969804df0d4e55fd58b07e4760801d21748df5dfa0e7624

The vault with the stuff is here: https://v.teknik.io/v/XJvC9

The patches for qbittorrent are here:
https://patchwork.ozlabs.org/patch/968472/
https://patchwork.ozlabs.org/patch/968473/

So is there an issue with the getentropy() function on arm hardware ?
There are no issues using qemu-arm-static on x86_64 to run the application.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

             reply	other threads:[~2018-09-12 10:10 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-12 10:10 bugzilla at busybox.net [this message]
2018-09-12 16:00 ` [Buildroot] [Bug 11346] qt5base-5.11.1 Assertion failed: ret == 0 after getentropy() inside fillBuffer() on arm bugzilla at busybox.net
2018-09-12 16:23 ` bugzilla at busybox.net
2018-09-12 21:23 ` bugzilla at busybox.net
2018-09-13 12:23 ` bugzilla at busybox.net
2018-11-02  9:53 ` bugzilla at busybox.net
2018-11-02 14:45 ` bugzilla at busybox.net
2024-06-15 14:48 ` bugzilla

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-11346-163@https.bugs.busybox.net/ \
    --to=bugzilla@busybox.net \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.