From 7a8b4907e2d5fe95b31e8f4f1cb1f176419fa9d7 Mon Sep 17 00:00:00 2001 From: Bas van Dijk Date: Mon, 8 Nov 2021 17:28:41 +0000 Subject: [PATCH] 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. --- nixos/tests/tinydns.nix | 16 +++++++++++++++- pkgs/tools/networking/djbdns/default.nix | 9 ++++++++- pkgs/tools/networking/djbdns/softlimit.patch | 12 ++++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 pkgs/tools/networking/djbdns/softlimit.patch diff --git a/nixos/tests/tinydns.nix b/nixos/tests/tinydns.nix index b80e3451700a..3e3b682f2b91 100644 --- a/nixos/tests/tinydns.nix +++ b/nixos/tests/tinydns.nix @@ -21,6 +21,20 @@ import ./make-test-python.nix ({ lib, ...} : { testScript = '' nameserver.start() 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 + # 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 + """ + ) ''; }) diff --git a/pkgs/tools/networking/djbdns/default.nix b/pkgs/tools/networking/djbdns/default.nix index 1b93d64d08f5..e7bb80afa6f9 100644 --- a/pkgs/tools/networking/djbdns/default.nix +++ b/pkgs/tools/networking/djbdns/default.nix @@ -19,7 +19,14 @@ stdenv.mkDerivation { 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 tests for this. + ./softlimit.patch + ]; postPatch = '' echo gcc -O2 -include ${glibc.dev}/include/errno.h > conf-cc diff --git a/pkgs/tools/networking/djbdns/softlimit.patch b/pkgs/tools/networking/djbdns/softlimit.patch new file mode 100644 index 000000000000..27ac7805a8c5 --- /dev/null +++ b/pkgs/tools/networking/djbdns/softlimit.patch @@ -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); \ No newline at end of file