djbdns: fix crash due to data ulimit
This fixes: https://github.com/NixOS/nixpkgs/issues/119066. When `djbdns` is repeatedly queried it will crash with: ``` mmap: tinydns (842): VmData 331776 exceed data ulimit 300000. Update limits or use boot option ignore_rlimit_data. ``` So we increase the softlimit from 300000 to 4500000 as suggested in the issue. The `tinydns` NixOS test has been extended with testing for the faulty behaviour.
This commit is contained in:
parent
dd1edacb7b
commit
7a8b4907e2
3 changed files with 35 additions and 2 deletions
|
@ -21,6 +21,20 @@ import ./make-test-python.nix ({ lib, ...} : {
|
||||||
testScript = ''
|
testScript = ''
|
||||||
nameserver.start()
|
nameserver.start()
|
||||||
nameserver.wait_for_unit("tinydns.service")
|
nameserver.wait_for_unit("tinydns.service")
|
||||||
nameserver.succeed("host bla.foo.bar 192.168.1.1 | grep '1\.2\.3\.4'")
|
|
||||||
|
# We query tinydns a few times to trigger the bug:
|
||||||
|
#
|
||||||
|
# nameserver # [ 6.105872] mmap: tinydns (842): VmData 331776 exceed data ulimit 300000. Update limits or use boot option ignore_rlimit_data.
|
||||||
|
#
|
||||||
|
# which was reported in https://github.com/NixOS/nixpkgs/issues/119066.
|
||||||
|
# Without the patch <nixpkgs/pkgs/tools/networking/djbdns/softlimit.patch>
|
||||||
|
# it fails on the 10th iteration.
|
||||||
|
nameserver.succeed(
|
||||||
|
"""
|
||||||
|
for i in {1..15}; do
|
||||||
|
host bla.foo.bar 192.168.1.1 | grep '1\.2\.3\.4'
|
||||||
|
done
|
||||||
|
"""
|
||||||
|
)
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,7 +19,14 @@ stdenv.mkDerivation {
|
||||||
sha256 = "0j3baf92vkczr5fxww7rp1b7gmczxmmgrqc8w2dy7kgk09m85k9w";
|
sha256 = "0j3baf92vkczr5fxww7rp1b7gmczxmmgrqc8w2dy7kgk09m85k9w";
|
||||||
};
|
};
|
||||||
|
|
||||||
patches = [ ./hier.patch ./fix-nix-usernamespace-build.patch ];
|
patches = [
|
||||||
|
./hier.patch
|
||||||
|
./fix-nix-usernamespace-build.patch
|
||||||
|
|
||||||
|
# To fix https://github.com/NixOS/nixpkgs/issues/119066.
|
||||||
|
# Note that the NixOS test <nixpkgs/nixos/tests/tinydns.nix> tests for this.
|
||||||
|
./softlimit.patch
|
||||||
|
];
|
||||||
|
|
||||||
postPatch = ''
|
postPatch = ''
|
||||||
echo gcc -O2 -include ${glibc.dev}/include/errno.h > conf-cc
|
echo gcc -O2 -include ${glibc.dev}/include/errno.h > conf-cc
|
||||||
|
|
12
pkgs/tools/networking/djbdns/softlimit.patch
Normal file
12
pkgs/tools/networking/djbdns/softlimit.patch
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
diff -Naur a/tinydns-conf.c b/tinydns-conf.c
|
||||||
|
--- a/tinydns-conf.c 2001-02-11 21:11:45.000000000 +0000
|
||||||
|
+++ b/tinydns-conf.c 2021-11-08 17:23:06.181385437 +0000
|
||||||
|
@@ -46,7 +46,7 @@
|
||||||
|
|
||||||
|
start("run");
|
||||||
|
outs("#!/bin/sh\nexec 2>&1\nexec envuidgid "); outs(user);
|
||||||
|
- outs(" envdir ./env softlimit -d300000 ");
|
||||||
|
+ outs(" envdir ./env softlimit -d4500000 ");
|
||||||
|
outs(auto_home); outs("/bin/tinydns\n");
|
||||||
|
finish();
|
||||||
|
perm(0755);
|
Loading…
Reference in a new issue