From a956789b363210514d471a18dc0a6ae09c5db89c Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Wed, 28 Feb 2024 22:33:39 +0000 Subject: [PATCH] unnethack: disable `fortify3` to avoid startup crash Without the change `unnethack` startup crashes as: (gdb) bt #0 __pthread_kill_implementation (threadid=, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 #1 0x00007f734250c0e3 in __pthread_kill_internal (signo=6, threadid=) at pthread_kill.c:78 #2 0x00007f73424bce06 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #3 0x00007f73424a58f5 in __GI_abort () at abort.c:79 #4 0x00007f73424a67a1 in __libc_message (fmt=fmt@entry=0x7f734261e2f8 "*** %s ***: terminated\n") at ../sysdeps/posix/libc_fatal.c:150 #5 0x00007f734259b1d9 in __GI___fortify_fail (msg=msg@entry=0x7f734261e2df "buffer overflow detected") at fortify_fail.c:24 #6 0x00007f734259ab94 in __GI___chk_fail () at chk_fail.c:28 #7 0x00000000005b2ac5 in strcpy (__src=0x7ffe68838b00 "Shall I pick a character's race, role, gender and alignment for you? [YNTQ] (y)", __dest=0x7ffe68838990 "\001") at /nix/store/B0S2LKF593R3585038WS4JD3LYLF2WDX-glibc-2.38-44-dev/include/bits/string_fortified.h:79 #8 curses_break_str (str=str@entry=0x7ffe68838b00 "Shall I pick a character's race, role, gender and alignment for you? [YNTQ] (y)", width=width@entry=163, line_num=line_num@entry=1) at ../win/curses/cursmisc.c:275 #9 0x00000000005b3f51 in curses_character_input_dialog (prompt=prompt@entry=0x7ffe68838cf0 "Shall I pick a character's race, role, gender and alignment for you?", choices=choices@entry=0x7ffe68838d70 "YNTQ", def=def@entry=121) at ../win/curses/cursdial.c:211 #10 0x00000000005b9ca0 in curses_choose_character () at ../win/curses/cursinit.c:556 #11 0x0000000000404eb1 in main (argc=, argv=) at ./../sys/unix/unixmain.c:309 which corresponds to `gcc` warning: ../win/curses/cursmisc.c: In function 'curses_break_str': ../win/curses/cursmisc.c:275:5: warning: '__builtin___strcpy_chk' writing one too many bytes into a region of a size that depends on 'strlen' [-Wstringop-overflow=] 275 | strcpy(substr, str); | ^ I did not find a single small upstream change that fixes it. Let's disable `fortify3` until next release. Closes: https://github.com/NixOS/nixpkgs/issues/292113 --- pkgs/games/unnethack/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pkgs/games/unnethack/default.nix b/pkgs/games/unnethack/default.nix index af402a7de935..f328b8c01eed 100644 --- a/pkgs/games/unnethack/default.nix +++ b/pkgs/games/unnethack/default.nix @@ -33,6 +33,11 @@ stdenv.mkDerivation rec { }) ]; + # Fails at startup due to off-by-one: + # https://github.com/NixOS/nixpkgs/issues/292113#issuecomment-1969989058 + # TODO: drop it once 6.x branch releases. + hardeningDisable = [ "fortify3" ]; + # Fails the build occasionally due to missing buid depends: # ./../sys/unix/unixmain.c:9:10: fatal error: date.h: No such file or directory # TODO: remove once upstream issue is fixed: