Source: liborcus
Version: 0.17.2-4
Severity: normal
Tags: ftbfs

Dear Maintainer,

The build fails on real hppa hardware (i.e., not qemu):

FAIL orcus-test-xml-mapped (exit status: 139)

============================================================================
Testsuite summary for liborcus 0.17.2
============================================================================
# TOTAL: 10
# PASS:  9
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0

Full log is here:
https://buildd.debian.org/status/fetch.php?pkg=liborcus&arch=hppa&ver=0.17.2-4&stamp=1697970148&raw=0

Console output:

do_page_fault() command='orcus-test-xml-' type=15 address=0xf5aca03a in 
libc.so.6[f7429000+1bc000]
trap #15: Data TLB miss fault, vm_start = 0xf5ad4000, vm_end = 0xf5ad5000

strace output:

[...]
statx(AT_FDCWD, "../test/xml-mapped/attribute-namespace/input.xml", 
AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 
{stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, 
stx_mode=S_IFREG|0644, stx_size=410, ...}) = 0
openat(AT_FDCWD, "../test/xml-mapped/attribute-namespace/input.xml", O_RDONLY) 
= 3
mmap2(NULL, 410, PROT_READ, MAP_SHARED, 3, 0) = 0xf7aca000
munmap(0xf56cf000, 345)                 = 0
close(5)                                = 0
openat(AT_FDCWD, "out.xml", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 5
write(5, "<?xml version=\"1.0\"?>\n<a:data xm"..., 378) = 378
close(5)                                = 0
statx(AT_FDCWD, "../test/xml-mapped/attribute-namespace/input.xml", 
AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, 
{stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, 
stx_mode=S_IFREG|0644, stx_size=410, ...}) = 0
openat(AT_FDCWD, "../test/xml-mapped/attribute-namespace/input.xml", O_RDONLY) 
= 5
mmap2(NULL, 410, PROT_READ, MAP_SHARED, 5, 0) = 0xf56ca000
munmap(0xf56ca000, 410)                 = 0
close(5)                                = 0
statx(AT_FDCWD, "out.xml", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, 
STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, 
stx_mode=S_IFREG|0644, stx_size=378, ...}) = 0
openat(AT_FDCWD, "out.xml", O_RDONLY)   = 5
mmap2(NULL, 378, PROT_READ, MAP_SHARED, 5, 0) = 0xf54d4000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xf56ca03a} ---
+++ killed by SIGSEGV (core dumped) +++
Segmentation fault

Running under gdb with breaks on __GI_munmap and __GI_memcmp, we have:

Breakpoint 1.1, __GI_munmap () at ../sysdeps/unix/syscall-template.S:120
120     ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) p/x $r26
$12 = 0xf72ca000
(gdb) bt
#0  __GI_munmap () at ../sysdeps/unix/syscall-template.S:120
#1  0xfa489f84 in boost::interprocess::mapped_region::priv_close 
(this=0x1e43c0) at /usr/include/boost/interprocess/mapped_region.hpp:841
#2  0xfa489b28 in boost::interprocess::mapped_region::~mapped_region 
(this=0x1e43c0, __in_chrg=<optimized out>)
    at /usr/include/boost/interprocess/mapped_region.hpp:276
#3  0xfa48e5d8 in orcus::file_content::impl::~impl (this=0x1e4398, 
__in_chrg=<optimized out>) at stream.cpp:152
#4  0xfa48e65c in std::default_delete<orcus::file_content::impl>::operator() 
(this=0xf8f02970, __ptr=0x1e4398)
    at /usr/include/c++/13/bits/unique_ptr.h:99
#5  0xfa48c814 in std::unique_ptr<orcus::file_content::impl, 
std::default_delete<orcus::file_content::impl> >::~unique_ptr (
    this=0xf8f02970, __in_chrg=<optimized out>) at 
/usr/include/c++/13/bits/unique_ptr.h:404
#6  0xfa484590 in orcus::file_content::~file_content (this=0xf8f02970, 
__in_chrg=<optimized out>) at stream.cpp:186
#7  0x000194d0 in operator() (__closure=0xf8f02564,
    
dump_content="ns0=\"http://ns-1\"\nns1=\"http://ns-2\"\n/ns0:data\n/ns0:data/ns1:entries\n/ns0:data/ns1:entries/ns1:entry\n/ns0:data/ns1:entries/ns1:entry@ns1:date-processed=\"2011-01-03\"\n/ns0:data/ns1:entries/ns1:entry@ns1:";...,
    filepath=0x1e4678 "../test/xml-mapped/attribute-namespace/input.xml", 
cxt=...) at orcus_test_xml_mapped.cpp:77
#8  0x0001a0fc in (anonymous namespace)::test_mapped_xml_import () at 
orcus_test_xml_mapped.cpp:150
#9  0x0001c01c in main () at orcus_test_xml_mapped.cpp:280
(gdb) c
Continuing.

Breakpoint 2, __GI_memcmp (s1=0xf6fb5024, s2=0xf72ca03a, len=1) at memcmp.c:306
306     memcmp.c: No such file or directory.
(gdb) bt
#0  __GI_memcmp (s1=0xf6fb5024, s2=0xf72ca03a, len=1) at memcmp.c:306
#1  0x0001d65c in std::char_traits<char>::compare (
    __s1=0xf6fb5024 "a=\"http://ns-1\"; xmlns:b=\"http://ns-2\";>\n    
<b:entries><b:entry b:date-received=\"2011-01-01\" 
b:date-processed=\"2011-01-03\" b:received-by=\"JKB\"/><b:entry 
b:date-received=\"2011-01-01\" b:date-processed=\"2"...,
    __s2=0xf72ca03a <error: Cannot access memory at address 0xf72ca03a>, __n=1) 
at /usr/include/c++/13/bits/char_traits.h:399
#2  0x000218d4 in std::basic_string_view<char, std::char_traits<char> 
>::compare (this=0xf8f03258,
    __str=<error: Cannot access memory at address 0xf72ca03a>) at 
/usr/include/c++/13/string_view:345
#3  0x000206dc in std::operator==<char, std::char_traits<char> > (__x="a", 
__y=<error: Cannot access memory at address 0xf72ca03a>)
    at /usr/include/c++/13/string_view:610
#4  0xfa666714 in std::equal_to<std::basic_string_view<char, 
std::char_traits<char> > >::operator() (this=0x65ebc, __x="a",
    __y=<error: Cannot access memory at address 0xf72ca03a>) at 
/usr/include/c++/13/bits/stl_function.h:378
#5  0xfa4c186c in std::__detail::_Hashtable_base<std::basic_string_view<char, 
std::char_traits<char> >, std::pair<std::basic_string_view<char, 
std::char_traits<char> > const, std::vector<char const*, std::allocator<char 
const*> > >, std::__detail::_Select1st, 
std::equal_to<std::basic_string_view<char, std::char_traits<char> > >, 
std::hash<std::basic_string_view<char, std::char_traits<char> > >, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Hashtable_traits<true, false, true> >::_M_key_equals (
    this=0x65ebc, __k="a", __n=...) at 
/usr/include/c++/13/bits/hashtable_policy.h:1728
#6  0xfa4beeb8 in std::_Hashtable<std::basic_string_view<char, 
std::char_traits<char> >, std::pair<std::basic_string_view<char, 
std::char_traits<char> > const, std::vector<char const*, std::allocator<char 
const*> > >, std::allocator<std::pair<std::basic_string_view<char, 
std::char_traits<char> > const, std::vector<char const*, std::allocator<char 
const*> > > >, std::__detail::_Select1st, 
std::equal_to<std::basic_string_view<char, std::char_traits<char> > >, 
std::hash<std::basic_string_view<char, std::char_traits<char> > >, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, 
false, true> >::find (this=0x65ebc, __k="a") at 
/usr/include/c++/13/bits/hashtable.h:1657
#7  0xfa4bc678 in std::unordered_map<std::basic_string_view<char, 
std::char_traits<char> >, std::vector<char const*, std::allocator<char c--Type 
<RET> for more, q to quit, c to continue without paging--
onst*> >, std::hash<std::basic_string_view<char, std::char_traits<char> > >, 
std::equal_to<std::basic_string_view<char, std::char_traits<char> > >, 
std::allocator<std::pair<std::basic_string_view<char, std::char_traits<char> > 
const, std::vector<char const*, std::allocator<char const*> > > > >::find 
(this=0x65ebc, __x="a") at /usr/include/c++/13/bits/unordered_map.h:876
#8  0xfa4b454c in orcus::xmlns_context::push (this=0xf8f02628, key="a", 
uri="http://ns-1";) at xml_namespace.cpp:238
#9  0xfa697e28 in 
orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper::attribute
 (this=0xf8f02a88, attr=...)
    at ../../include/orcus/sax_ns_parser.hpp:235
#10 0xfa695fd4 in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::attribute (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:570
#11 0xfa69714c in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::element_open (this=0xf8f02b14, 
begin_pos=22) at ../../include/orcus/sax_parser.hpp:290
#12 0xfa6948c8 in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::element (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:246
#13 0xfa692da8 in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::body (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:214
#14 0xfa69161c in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::parse (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:182
#15 0xfa68f688 in orcus::sax_ns_parser<orcus::dom::document_tree::impl>::parse 
(this=0xf8f02a88)
    at ../../include/orcus/sax_ns_parser.hpp:277
#16 0xfa674838 in orcus::dom::document_tree::load (this=0xf8f02974,
    strm="<?xml version=\"1.0\"?>\n<a:data xmlns:a=\"http://ns-1\"; 
xmlns:b=\"http://ns-2\";>\n    <b:entries><b:entry 
b:date-received=\"2011-01-01\" b:date-processed=\"2011-01-03\" 
b:received-by=\"JKB\"/><b:entry b:date-recei"...) at dom_tree.cpp:586
#17 0x00019438 in operator() (__closure=0xf8f02564, dump_content="", 
filepath=0xf8f02664 "out.xml", cxt=...)
    at orcus_test_xml_mapped.cpp:73
--Type <RET> for more, q to quit, c to continue without paging--
#18 0x0001a144 in (anonymous namespace)::test_mapped_xml_import () at 
orcus_test_xml_mapped.cpp:151
#19 0x0001c01c in main () at orcus_test_xml_mapped.cpp:280
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.
__GI_memcmp (s1=<optimized out>, s2=<optimized out>, len=<optimized out>) at 
memcmp.c:346
346     in memcmp.c
(gdb) bt
#0  __GI_memcmp (s1=<optimized out>, s2=<optimized out>, len=<optimized out>) 
at memcmp.c:346
#1  0x0001d65c in std::char_traits<char>::compare (
    __s1=0xf6fb5024 "a=\"http://ns-1\"; xmlns:b=\"http://ns-2\";>\n    
<b:entries><b:entry b:date-received=\"2011-01-01\" 
b:date-processed=\"2011-01-03\" b:received-by=\"JKB\"/><b:entry 
b:date-received=\"2011-01-01\" b:date-processed=\"2"...,
    __s2=0xf72ca03a <error: Cannot access memory at address 0xf72ca03a>, __n=1) 
at /usr/include/c++/13/bits/char_traits.h:399
#2  0x000218d4 in std::basic_string_view<char, std::char_traits<char> 
>::compare (this=0xf8f03258,
    __str=<error: Cannot access memory at address 0xf72ca03a>) at 
/usr/include/c++/13/string_view:345
#3  0x000206dc in std::operator==<char, std::char_traits<char> > (__x="a", 
__y=<error: Cannot access memory at address 0xf72ca03a>)
    at /usr/include/c++/13/string_view:610
#4  0xfa666714 in std::equal_to<std::basic_string_view<char, 
std::char_traits<char> > >::operator() (this=0x65ebc, __x="a",
    __y=<error: Cannot access memory at address 0xf72ca03a>) at 
/usr/include/c++/13/bits/stl_function.h:378
#5  0xfa4c186c in std::__detail::_Hashtable_base<std::basic_string_view<char, 
std::char_traits<char> >, std::pair<std::basic_string_view<char, 
std::char_traits<char> > const, std::vector<char const*, std::allocator<char 
const*> > >, std::__detail::_Select1st, 
std::equal_to<std::basic_string_view<char, std::char_traits<char> > >, 
std::hash<std::basic_string_view<char, std::char_traits<char> > >, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Hashtable_traits<true, false, true> >::_M_key_equals (
    this=0x65ebc, __k="a", __n=...) at 
/usr/include/c++/13/bits/hashtable_policy.h:1728
#6  0xfa4beeb8 in std::_Hashtable<std::basic_string_view<char, 
std::char_traits<char> >, std::pair<std::basic_string_view<char, 
std::char_traits<char> > const, std::vector<char const*, std::allocator<char 
const*> > >, std::allocator<std::pair<std::basic_string_view<char, 
std::char_traits<char> > const, std::vector<char const*, std::allocator<char 
const*> > > >, std::__detail::_Select1st, 
std::equal_to<std::basic_string_view<char, std::char_traits<char> > >, 
std::hash<std::basic_string_view<char, std::char_traits<char> > >, 
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, 
std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, 
false, true> >::find (this=0x65ebc, __k="a") at 
/usr/include/c++/13/bits/hashtable.h:1657
#7  0xfa4bc678 in std::unordered_map<std::basic_string_view<char, 
std::char_traits<char> >, std::vector<char const*, std::allocator<char c--Type 
<RET> for more, q to quit, c to continue without paging--
onst*> >, std::hash<std::basic_string_view<char, std::char_traits<char> > >, 
std::equal_to<std::basic_string_view<char, std::char_traits<char> > >, 
std::allocator<std::pair<std::basic_string_view<char, std::char_traits<char> > 
const, std::vector<char const*, std::allocator<char const*> > > > >::find 
(this=0x65ebc, __x="a") at /usr/include/c++/13/bits/unordered_map.h:876
#8  0xfa4b454c in orcus::xmlns_context::push (this=0xf8f02628, key="a", 
uri="http://ns-1";) at xml_namespace.cpp:238
#9  0xfa697e28 in 
orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper::attribute
 (this=0xf8f02a88, attr=...)
    at ../../include/orcus/sax_ns_parser.hpp:235
#10 0xfa695fd4 in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::attribute (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:570
#11 0xfa69714c in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::element_open (this=0xf8f02b14, 
begin_pos=22) at ../../include/orcus/sax_parser.hpp:290
#12 0xfa6948c8 in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::element (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:246
#13 0xfa692da8 in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::body (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:214
#14 0xfa69161c in 
orcus::sax_parser<orcus::sax_ns_parser<orcus::dom::document_tree::impl>::handler_wrapper,
 orcus::sax_parser_default_config>::parse (this=0xf8f02b14) at 
../../include/orcus/sax_parser.hpp:182
#15 0xfa68f688 in orcus::sax_ns_parser<orcus::dom::document_tree::impl>::parse 
(this=0xf8f02a88)
    at ../../include/orcus/sax_ns_parser.hpp:277
#16 0xfa674838 in orcus::dom::document_tree::load (this=0xf8f02974,
    strm="<?xml version=\"1.0\"?>\n<a:data xmlns:a=\"http://ns-1\"; 
xmlns:b=\"http://ns-2\";>\n    <b:entries><b:entry 
b:date-received=\"2011-01-01\" b:date-processed=\"2011-01-03\" 
b:received-by=\"JKB\"/><b:entry b:date-recei"...) at dom_tree.cpp:586
#17 0x00019438 in operator() (__closure=0xf8f02564, dump_content="", 
filepath=0xf8f02664 "out.xml", cxt=...)
    at orcus_test_xml_mapped.cpp:73
--Type <RET> for more, q to quit, c to continue without paging--
#18 0x0001a144 in (anonymous namespace)::test_mapped_xml_import () at 
orcus_test_xml_mapped.cpp:151
#19 0x0001c01c in main () at orcus_test_xml_mapped.cpp:280
(gdb) c
Continuing.

Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.

The fault occurs in __GI_memcmp for an address in the region unmapped with
the call "munmap(0xf56ca000, 410)". This address seems to arise at
hashtable_policy.h:1728.

Exactly the same binary runs successfully under qemu.

Maybe there is a timing issue in the orcus::file_content::~file_content
destructor?

Regards,
Dave Anglin

-- System Information:
Debian Release: trixie/sid
  APT prefers buildd-unstable
  APT policy: (500, 'buildd-unstable'), (500, 'unstable')
Architecture: hppa (parisc64)

Kernel: Linux 6.1.59+ (SMP w/4 CPU threads)
Locale: LANG=C, LC_CTYPE=C.UTF-8 (charmap=UTF-8), LANGUAGE not set
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)

Reply via email to