Hello everyone. Just got a backtrace from the coredump file:

(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x0000ffffbba66df4 in __GI_abort () at abort.c:89
#2  0x0000aaaae000a8bc in assertion_failed (file=<optimized out>,
line=<optimized out>, type=<optimized out>, cond=<optimized out>)
    at ../../../bin/named/main.c:232
#3  0x0000ffffbbe7274c in isc_assertion_failed () from
/usr/lib/aarch64-linux-gnu/libisc.so.160
#4  0x0000ffffbc339400 in dns_rdata_compare (rdata1=<optimized out>,
rdata2=0xffffb5608e70) at ../../../lib/dns/rdata.c:421
#5  0x0000ffffbba67600 in msort_with_tmp (p=0xffffb924dcd8,
b=0xffffb924dc18, n=3) at msort.c:124
#6  0x0000ffffbba6745c in msort_with_tmp (n=2, b=0xffffb924dc20,
p=0xffffb924dcd8) at msort.c:45
#7  msort_with_tmp (p=0xffffb924dcd8, b=0x28, n=281473787943944) at
msort.c:54
#8  0x0000ffffbba6745c in msort_with_tmp (n=3, b=0xffffb924dc18,
p=0xffffb924dcd8) at msort.c:45
#9  msort_with_tmp (p=0xffffb924dcd8, b=0xffffa0808498, n=1) at msort.c:54
#10 0x0000ffffbba67804 in msort_with_tmp (n=5, b=<optimized out>,
p=0xffffb924dd28) at msort.c:45
#11 __GI___qsort_r (b=b@entry=0xffffb5608dd0, n=5,
n@entry=13744632836034396160, s=s@entry=40, cmp=cmp@entry=0xffffbc2caea8
<rdata_compare_wrapper>,
    arg=arg@entry=0x0) at msort.c:254
#12 0x0000ffffbba679d0 in __GI_qsort (b=b@entry=0xffffb5608dd0,
n=n@entry=13744632836034396160, s=s@entry=40,
    cmp=cmp@entry=0xffffbc2caea8 <rdata_compare_wrapper>) at msort.c:308
#13 0x0000ffffbc2cb0f4 in rdataset_to_sortedarray (set=<optimized out>,
mctx=0xaaaaf3852de0, rdata=0xffffb924dec8, nrdata=0xffffb4543430)
    at ../../../lib/dns/dnssec.c:136
#14 0x0000ffffb924dbe0 in ?? ()
Backtrace stopped: not enough registers or memory available to unwind
further


This is really strange:

(gdb) frame 13
#13 0x0000ffffbc2cb0f4 in rdataset_to_sortedarray (set=<optimized out>,
mctx=0xaaaaf3852de0, rdata=0xffffb924dec8, nrdata=0xffffb4543430)
    at ../../../lib/dns/dnssec.c:136
136        qsort(data, n, sizeof(dns_rdata_t), rdata_compare_wrapper);
(gdb) print n
$20 = 4
(gdb) print &data[3]
$21 = (dns_rdata_t *) 0xffffb5608e48

Here is what: (frame 4) - rdata_compare procedure (called by libc qsort)
we have rdata2 as 0xffffb5608e70

0xffffb5608e70 > 0xffffb5608e48

(gdb) print &data[4]
$22 = (dns_rdata_t *) 0xffffb5608e70

This is what confusing me! How is it happening. Continue my investigation.

-- 
Philippe Duke
Network software engineer
System-level developer

NetAssist LLC
Ukraine
Khreshchatyk Street, 10B, office 8
AS29632

http://netassist.ua
Our GitHub Repository:
https://github.com/netassist-ua

Reply via email to