Named Crashes: Named startup crash on low-memory devices
Summary
Named startup crash on low-memory devices if generate too much rr through $GENERATE
BIND version used
BIND 9.19.17-dev (Development Release) <id:edd9925>
Steps to reproduce
step1. configure named
- named.conf
options {
directory "/path/to/directory";
allow-query { any; };
listen-on port specify-a-port { any; };
};
zone "example.com." {
type primary;
file "example.db";
};
- example.db
$ORIGIN .
$TTL 120
@ SOA tld4. hostmaster.ns.tld4. ( 1 3600 1200 604800 60 )
NS ns
ns A 16.53.0.2
$GENERATE 0-28836000 HOST-$ MX "0 ."
step2. create a low-ram environment
ulimit -v 512000 # or 204800
step3. startup named
What is the current bug behavior?
set 200M virtual memory
ulimit -v 204800
#0 0x00007ffff4d97438 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff4d9903a in __GI_abort () at abort.c:89
#2 0x0000000000433489 in assertion_failed (file=0x7ffff7bbba8e "./jemalloc_shim.h", line=66, type=<optimized out>,
cond=0x7ffff7bbbb34 "ptr != ((void*)0)") at main.c:225
#3 0x00007ffff7b2a331 in isc_assertion_failed (file=0x63bb <error: Cannot access memory at address 0x63bb>, line=25538,
line@entry=66, type=6, type@entry=isc_assertiontype_insist, cond=0x7ffff4d97438 <__GI_raise+56> "H=")
at assertions.c:48
#4 0x00007ffff7b67178 in mallocx (size=65576, flags=0) at ./jemalloc_shim.h:66
#5 mem_get (ctx=0x706630, size=65576, flags=0) at mem.c:306
#6 isc__mem_get (ctx=ctx@entry=0x706630, size=size@entry=65576, flags=flags@entry=0,
file=0x4931de "../../lib/isc/include/isc/buffer.h", line=line@entry=1085) at mem.c:691
#7 0x000000000041b65d in isc_buffer_allocate (mctx=0x706630, dbufp=0x7ffff2c90f40, length=65512)
at ../../lib/isc/include/isc/buffer.h:1085
#8 putrr (node=node@entry=0x7ffff7e19010, type=<optimized out>, ttl=ttl@entry=0, data=data@entry=0x7ffff7e27010 "@")
at builtin.c:176
#9 0x0000000000417bde in builtin_authority (node=0x7ffff7e19010, bdb=<optimized out>) at builtin.c:489
#10 findnode (db=db@entry=0x7ffff7ff2010, name=<optimized out>, name@entry=0x8f2460, create=<optimized out>,
nodep=nodep@entry=0x7ffff2c91900) at builtin.c:897
#11 0x00007ffff7508817 in dns__db_findnode (db=db@entry=0x7ffff7ff2010, name=name@entry=0x8f2460, create=false,
nodep=nodep@entry=0x7ffff2c91900) at db.c:419
#12 0x00007ffff7860e9e in check_nsec3param (zone=zone@entry=0x8f22a0, db=db@entry=0x7ffff7ff2010) at zone.c:3881
#13 0x00007ffff78091ea in zone_postload (zone=<optimized out>, zone@entry=0x8f22a0, db=<optimized out>, loadtime=...,
result=result@entry=ISC_R_SUCCESS) at zone.c:4944
#14 0x00007ffff77d8e94 in zone_load (zone=<optimized out>, zone@entry=0x8f22a0, flags=<optimized out>, locked=false)
at zone.c:2342
#15 0x00007ffff77d9ec7 in zone_asyncload (arg=0x7601a0) at zone.c:2371
#16 0x00007ffff7b2a9e0 in isc__async_cb (handle=<optimized out>) at async.c:111
#17 0x00007ffff609f3b4 in uv__async_io (loop=0x6f3bf0, w=<optimized out>, events=<optimized out>) at src/unix/async.c:163
--Type <RET> for more, q to quit, c to continue without paging--
#18 0x00007ffff60b2a0c in uv__io_poll (loop=loop@entry=0x6f3bf0, timeout=<optimized out>) at src/unix/epoll.c:374
#19 0x00007ffff609fbd0 in uv_run (loop=loop@entry=0x6f3bf0, mode=mode@entry=UV_RUN_DEFAULT) at src/unix/core.c:406
#20 0x00007ffff7b60d96 in loop_thread (arg=arg@entry=0x6f3bd0) at loop.c:282
#21 0x00007ffff7b8b511 in thread_body (wrap=0x702200) at thread.c:85
#22 thread_run (wrap=0x702200) at thread.c:100
#23 0x00007ffff5a546ba in start_thread (arg=0x7ffff2c97700) at pthread_create.c:333
#24 0x00007ffff4e6951d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
set 500M virtual memory
ulimit -v 512000
#0 0x00007ffff4d97438 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1 0x00007ffff4d9903a in __GI_abort () at abort.c:89
#2 0x000000000043366a in library_fatal_error (file=0x7ffff7bbf4eb "thread.c", line=140,
func=0x7ffff7bbf521 "isc_thread_create", format=0x7ffff7bb3e96 "%s(): %s (%d)", args=0x7fffffffdf30) at main.c:265
#3 0x00007ffff7b32404 in isc_error_fatal (file=0x6ea1 <error: Cannot access memory at address 0x6ea1>, line=28321,
line@entry=140, func=0x6 <error: Cannot access memory at address 0x6>, format=0x7ffff4d97438 <__GI_raise+56> "H=")
at error.c:69
#4 0x00007ffff7b8b434 in isc_thread_create (func=<optimized out>, arg=0x6f5550, thread=thread@entry=0x6f5560)
at thread.c:140
#5 0x00007ffff7b60abd in isc_loopmgr_run (loopmgr=0x6ef0b0) at loop.c:448
#6 0x000000000043295a in main (argc=<optimized out>, argv=<optimized out>) at main.c:1535