Source: djbdns Version: 1:1.05-22.1 Severity: important Tags: upstream patch X-Debbugs-Cc: [email protected] User: [email protected] Usertags: arm64
Dear maintainer, djbdns autopkgtest fails on arm64 when run against glibc 2.43, currently in experimental. From the autopkgtest log: | 37s ==== test_tinydns_run_udp | 37s - spawned process 3012 | 37s - waiting for the 'starting tinydns' line | 37s - got line 'starting tinydns\n' | 37s - tinydns is listening at 127.6.16.1:53 | 37s - query packet: b'\x00\x11\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x07example\x03com\x00\x00\x01\x00\x01' | 37s - we spawned a process, checking if it has exited | 37s Terminating process 3012 | 38s Query 8: expected a '+' in the tinydns log line '7f000001:e214:0018 - 0001 example.com\n' | 38s autopkgtest [16:09:28]: test tinytest: -----------------------] https://ci.debian.net/data/autopkgtest/unstable/arm64/d/djbdns/68572095/log.gz After investigation, the failure is due to 2MB THP being enabled by default in glibc 2.43 on arm64. This increases the size of the data segment, causing it to exceed the soft limit defined by tinydns-conf. The issue can also be reproduced with glibc 2.42, even on amd64, by setting the GLIBC_TUNABLES environment variable to glibc.malloc.hugetlb=2. A possible way to fix the issue is to increase the data segment limit. It seems that raising it from 7000000 (or 3000000 before #996807) to 13000000 is enough. Tested with the corresponding patch: --- djbdns-1.05/debian/patches/0011-datalimit.patch +++ djbdns-1.05/debian/patches/0011-datalimit.patch @@ -10,7 +10,7 @@ start("run"); outs("#!/bin/sh\nexec 2>&1\nexec envdir ./env sh -c '\n exec envuidgid "); outs(user); - outs(" softlimit -d300000 tcpserver -vDRHl0 -x tcp.cdb -- \"$IP\" 53 "); -+ outs(" softlimit -d700000 tcpserver -vDRHl0 -x tcp.cdb -- \"$IP\" 53 "); ++ outs(" softlimit -d1300000 tcpserver -vDRHl0 -x tcp.cdb -- \"$IP\" 53 "); outs(auto_home); outs("/sbin/axfrdns\n'\n"); finish(); perm(0755); @@ -21,7 +21,7 @@ seed_addtime(); start("env/CACHESIZE"); outs("1000000\n"); finish(); seed_addtime(); perm(0644); - seed_addtime(); start("env/DATALIMIT"); outs("3000000\n"); finish(); -+ seed_addtime(); start("env/DATALIMIT"); outs("7000000\n"); finish(); ++ seed_addtime(); start("env/DATALIMIT"); outs("13000000\n"); finish(); seed_addtime(); perm(0644); seed_addtime(); start("run"); outs("#!/bin/sh\nexec 2>&1\nexec <seed\nexec envdir ./env sh -c '\n exec envuidgid "); outs(user); @@ -32,7 +32,7 @@ start("run"); outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user); - outs(" envdir ./env softlimit -d300000 "); -+ outs(" envdir ./env softlimit -d700000 "); ++ outs(" envdir ./env softlimit -d1300000 "); outs(auto_home); outs("/sbin/tinydns\n"); finish(); perm(0755); Regards Aurelien

