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

Reply via email to