Bash IFS bug 2025-08-14 From: the.true.nathan.mi...@gmail.com To: bug-bash@gnu.org Subject: Bash 5.3 crashes on a syntactically invalid IFS array
Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -g -O2 uname output: Linux nixos 6.6.87.2-microsoft-standard-WSL2 #1 SMP PREEMPT_DYNAMIC Thu Jun 5 18:30:46 UTC 2025 x86_64 GN U/Linux Machine Type: x86_64-pc-linux-gnu Bash Version: 5.2 Patch Level: 37 Release Status: release Description: [Detailed description of the problem, suggestion, or complaint.] Bash 5.3 crashes on a syntactically invalid IFS array. Setting the IFS variable to a syntactically invalid array causes Bash to free the old value of IFS (in convert_var_to_array), leaving `ifs_value` as a dangling pointer. When Bash later tries to use ifs_value in expand_word_internal, AddressSanitizer immediately complains about a use-after-free. Found with AFL++ running in a Docker Desktop container on NixOS-WSL2. This is crash id #355 in output_devel-gffcfb14_try5. There are also two other crashes #456 and #458 with a different backtrace than 355, but #456 and #458 backtraces are nearly the same, so I only included one of them. With all three crashing inputs, the address that AddressSanitizer complains about is that of ifs_value. I would have minimized #456 and #458 as well, but afl-tmin does not seem to work very well on those test cases. Repeat-By: Sequence of events: 1. initialize_shell_variables binds IFS to a new temporary variable with the value of "\t\n" 2. do_compound_assignment indirectly calls convert_var_to_array 3. convert_var_to_array frees the value underlying IFS, now ifs_value points to freed memory. 4. expand_word_internal tries to use ifs_value 5. AddressSanitizer complains of use-after-free. Reproducible: every time with development bash, never with NixOS's system bash. Base64'd: PiQnJ2hpbHN0b3J5LXMgSUZTPShyRV9Fak9DU7VlJEAkYWxsISkgdT1olnJFX0VNQUNTtW1hcmst bW9kaWZpZWQtbGluZXNlJEAkYWxstbW0tbW1mbVvdXS1/RAAcf////9BUw== Minimal: bash -c 'IFS=($@!)' Fix: [Description of how to fix the problem. If you don't know a fix for the problem, don't include this section.] The fix is to treat IFS as a special variable in do_compound_assignment by clearing IFS value if we are about to convert it into an array. The patch provided stops Bash from crashing and seems to pass all the tests except for the ones complaining about /bin/echo missing, but that's normal on NixOS. diff --git a/subst.c b/subst.c index c98330a5..cd98a863 100644 --- a/subst.c +++ b/subst.c @@ -3500,6 +3500,8 @@ do_compound_assignment (const char *name, char *value, int flags) } else { + if (STREQ(name, "IFS") && ifs_var && !array_p(ifs_var)) + ifs_value = NULL; v = assign_array_from_string (name, value, flags); if (v && ASSIGN_DISALLOWED (v, flags)) { Bash version: ff6cfb14 (heads/devel, Aug 8, 2025) Development bash: GNU bash, version 5.3.0(5)-maint (x86_64-pc-linux-gnu) System bash: GNU bash, version 5.3.0(1)-release (x86_64-pc-linux-gnu) Bash compile flags: CC=clang CXX=clang++ CFLAGS='-fsanitize=address,undefined' bash -c './configure --without-bash-malloc && make -j6' AFL++ 4.32c Docker version: 4.44.1 (201842) Engine: 28.3.2 NixOS version: 25.05.808080.ddae11e58c0c (Warbler) Clang version (Docker, but clang on NixOS is the same version): ``` Ubuntu clang version 19.1.7 (++20250114103253+cd708029e0b2-1~exp1~20250114103309.40) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/lib/llvm-19/bin ``` wsl.exe --version: ``` WSL version: 2.5.10.0 Kernel version: 6.6.87.2-1 WSLg version: 1.0.66 MSRDC version: 1.2.6074 Direct3D version: 1.611.1-81528511 DXCore version: 10.0.26100.1-240331-1435.ge-release Windows version: 10.0.19045.6216 ``` Computer: MSi GS63 Stealth 8RE running Windows 10 x64 upgraded with 32-gigs memory and 2TB hard drive ================================================================= ==8431==ERROR: AddressSanitizer: heap-use-after-free on address 0x5020000035d0 at pc 0x555555983305 bp 0x7fffffff9790 sp 0x7fffffff9788 READ of size 1 at 0x5020000035d0 thread T0 #0 0x555555983304 (/home/nixos/src/bash/nonAFL/bash+0x42f304) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #1 0x55555599463f (/home/nixos/src/bash/nonAFL/bash+0x44063f) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #2 0x5555559f9699 (/home/nixos/src/bash/nonAFL/bash+0x4a5699) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #3 0x5555559f7bb4 (/home/nixos/src/bash/nonAFL/bash+0x4a3bb4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #4 0x555555971315 (/home/nixos/src/bash/nonAFL/bash+0x41d315) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #5 0x555555991829 (/home/nixos/src/bash/nonAFL/bash+0x43d829) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #6 0x5555558e376e (/home/nixos/src/bash/nonAFL/bash+0x38f76e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #7 0x5555558da39e (/home/nixos/src/bash/nonAFL/bash+0x38639e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #8 0x555555a690fa (/home/nixos/src/bash/nonAFL/bash+0x5150fa) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #9 0x555555888cb8 (/home/nixos/src/bash/nonAFL/bash+0x334cb8) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #10 0x55555588600a (/home/nixos/src/bash/nonAFL/bash+0x33200a) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #11 0x7ffff7a2a47d (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a47d) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) #12 0x7ffff7a2a538 (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a538) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) #13 0x555555743b04 (/home/nixos/src/bash/nonAFL/bash+0x1efb04) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) 0x5020000035d0 is located 0 bytes inside of 4-byte region [0x5020000035d0,0x5020000035d4) freed by thread T0 here: #0 0x555555835838 (/home/nixos/src/bash/nonAFL/bash+0x2e1838) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #1 0x5555559f3850 (/home/nixos/src/bash/nonAFL/bash+0x49f850) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #2 0x5555559f7260 (/home/nixos/src/bash/nonAFL/bash+0x4a3260) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #3 0x5555559f7ae6 (/home/nixos/src/bash/nonAFL/bash+0x4a3ae6) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #4 0x555555971315 (/home/nixos/src/bash/nonAFL/bash+0x41d315) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #5 0x555555991829 (/home/nixos/src/bash/nonAFL/bash+0x43d829) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #6 0x5555558e376e (/home/nixos/src/bash/nonAFL/bash+0x38f76e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #7 0x5555558da39e (/home/nixos/src/bash/nonAFL/bash+0x38639e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #8 0x555555a690fa (/home/nixos/src/bash/nonAFL/bash+0x5150fa) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #9 0x555555888cb8 (/home/nixos/src/bash/nonAFL/bash+0x334cb8) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #10 0x55555588600a (/home/nixos/src/bash/nonAFL/bash+0x33200a) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #11 0x7ffff7a2a47d (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a47d) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) previously allocated by thread T0 here: #0 0x555555836807 (/home/nixos/src/bash/nonAFL/bash+0x2e2807) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #1 0x555555a4bb6c (/home/nixos/src/bash/nonAFL/bash+0x4f7b6c) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #2 0x55555590f81c (/home/nixos/src/bash/nonAFL/bash+0x3bb81c) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #3 0x555555909e9d (/home/nixos/src/bash/nonAFL/bash+0x3b5e9d) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #4 0x5555558ff5d3 (/home/nixos/src/bash/nonAFL/bash+0x3ab5d3) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #5 0x55555588578d (/home/nixos/src/bash/nonAFL/bash+0x33178d) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #6 0x7ffff7a2a47d (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a47d) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) SUMMARY: AddressSanitizer: heap-use-after-free (/home/nixos/src/bash/nonAFL/bash+0x42f304) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) Shadow bytes around the buggy address: 0x502000003300: fa fa 07 fa fa fa 07 fa fa fa 00 06 fa fa 07 fa 0x502000003380: fa fa 07 fa fa fa 00 04 fa fa 00 04 fa fa 01 fa 0x502000003400: fa fa 05 fa fa fa 05 fa fa fa 06 fa fa fa 00 03 0x502000003480: fa fa 01 fa fa fa 02 fa fa fa 02 fa fa fa 07 fa 0x502000003500: fa fa 00 01 fa fa 04 fa fa fa 04 fa fa fa 03 fa =>0x502000003580: fa fa 04 fa fa fa 04 fa fa fa[fd]fa fa fa 07 fa 0x502000003600: fa fa 07 fa fa fa 00 02 fa fa 00 01 fa fa 00 01 0x502000003680: fa fa 00 01 fa fa 00 01 fa fa 06 fa fa fa 02 fa 0x502000003700: fa fa 05 fa fa fa 05 fa fa fa 06 fa fa fa 07 fa 0x502000003780: fa fa 07 fa fa fa 02 fa fa fa 07 fa fa fa 07 fa 0x502000003800: fa fa 02 fa fa fa 05 fa fa fa 05 fa fa fa 00 05 Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb ==8431==ABORTING Program received signal SIGABRT, Aborted. 0x0000701a970e7f1c in pthread_kill () from /lib/x86_64-linux-gnu/libc.so.6 (gdb) bt #0 0x0000701a970e7f1c in pthread_kill () from /lib/x86_64-linux-gnu/libc.so.6 #1 0x0000701a9708919e in raise () from /lib/x86_64-linux-gnu/libc.so.6 #2 0x0000701a9706c902 in abort () from /lib/x86_64-linux-gnu/libc.so.6 #3 0x0000598d93fd9fbb in __sanitizer::Abort() () #4 0x0000598d93fd78c8 in __sanitizer::Die() () #5 0x0000598d93fb6743 in __asan::ScopedInErrorReport::~ScopedInErrorReport() () #6 0x0000598d93fb5d3a in __asan::ReportGenericError(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned int, bool) [clone .part.0] () #7 0x0000598d93fb7086 in __asan_report_load1 () #8 0x0000598d940f9345 in expand_word_internal (word=0x502000001bd0, quoted=<optimized out>, isexp=<optimized out>, contains_dollar_at=<optimized out>, expanded_something=<optimized out>) at subst.c:12178 #9 0x0000598d9410a680 in shell_expand_word_list (tlist=0x502000001bf0, eflags=30) at subst.c:13113 #10 expand_word_list_internal (list=<optimized out>, eflags=<optimized out>) at subst.c:13280 #11 0x0000598d9416f6da in expand_compound_array_assignment (var=<optimized out>, value=0x5030000019f0 "rE_EjOCS\265e$@$all!", flags=<optimized out>) at arrayfunc.c:610 #12 0x0000598d9416dbf5 in assign_array_var_from_string (var=0x504000000810, value=0xb7d3 <error: Cannot access memory at address 0xb7d3>, flags=6) at arrayfunc.c:918 #13 0x0000598d940e7356 in do_compound_assignment (name=0x5030000019c0 "IFS", value=0x5030000019f0 "rE_EjOCS\265e$@$all!", flags=<optimized out>) at subst.c:3503 #14 do_assignment_internal (word=<optimized out>, expand=<optimized out>) at subst.c:3619 #15 0x0000598d9410786a in do_word_assignment (word=0xb7d3, flags=0) at subst.c:3663 #16 do_assignment_statements (varlist=<optimized out>, command=0x0, is_nullcmd=1) at subst.c:13192 #17 expand_word_list_internal (list=<optimized out>, eflags=<optimized out>) at subst.c:13258 #18 0x0000598d940597af in execute_simple_command (simple_command=<optimized out>, pipe_in=-1, pipe_out=-1, async=<optimized out>, fds_to_close=<optimized out>) at execute_cmd.c:4617 #19 0x0000598d940503df in execute_command_internal (command=<optimized out>, asynchronous=<optimized out>, pipe_in=<optimized out>, pipe_out=<optimized out>, fds_to_close=<optimized out>) at execute_cmd.c:938 #20 0x0000598d9404e405 in execute_command (command=0x5030000017b0) at execute_cmd.c:456 #21 0x0000598d940013d4 in reader_loop () at eval.c:183 #22 0x0000598d93ffc18f in main (argc=2, argv=0x7ffc3cc57548, env=<optimized out>) at shell.c:834 (gdb) frame 8 #8 0x0000598d940f9345 in expand_word_internal (word=0x502000001bd0, quoted=<optimized out>, isexp=<optimized out>, contains_dollar_at=<optimized out>, expanded_something=<optimized out>) at subst.c:12178 Freed at: 0x000064afacb9c81f in __asan::asan_free(void*, __sanitizer::BufferedStackTrace*, __asan::AllocType) () (rr) bt #0 0x000064afacb9c81f in __asan::asan_free(void*, __sanitizer::BufferedStackTrace*, __asan::AllocType) () #1 0x000064afacc877ff in ___interceptor_free.part.0 () #2 0x000064aface45891 in convert_var_to_array (var=<optimized out>) at arrayfunc.c:84 #3 0x000064aface492a1 in find_or_make_array_variable (name=name@entry=0x50300000db40 "IFS", flags=<optimized out>) at arrayfunc.c:499 #4 0x000064aface49b27 in assign_array_from_string (name=0x0, name@entry=0x50300000db40 "IFS", value=0x50300000db70 "rE_EjOCS\265e$@$all!", flags=3, flags@entry=0) at arrayfunc.c:517 #5 0x000064afacdc3356 in do_compound_assignment (name=0x50300000db40 "IFS", value=0x50300000db70 "rE_EjOCS\265e$@$all!", flags=<optimized out>) at subst.c:3503 #6 do_assignment_internal (word=<optimized out>, expand=<optimized out>) at subst.c:3619 #7 0x000064afacde386a in do_word_assignment (word=0x0, flags=0) at subst.c:3663 #8 do_assignment_statements (varlist=<optimized out>, command=0x0, is_nullcmd=1) at subst.c:13192 #9 expand_word_list_internal (list=<optimized out>, eflags=<optimized out>) at subst.c:13258 #10 0x000064afacd357af in execute_simple_command (simple_command=<optimized out>, pipe_in=-1, pipe_out=-1, async=<optimized out>, fds_to_close=<optimized out>) at execute_cmd.c:4617 #11 0x000064afacd2c3df in execute_command_internal (command=<optimized out>, asynchronous=<optimized out>, pipe_in=<optimized out>, pipe_out=<optimized out>, fds_to_close=<optimized out>) at execute_cmd.c:938 #12 0x000064afacd2a405 in execute_command (command=0x50300000d930) at execute_cmd.c:456 #13 0x000064afaccdd3d4 in reader_loop () at eval.c:183 #14 0x000064afaccd818f in main (argc=2, argv=0x7ffe8f0f3ef8, env=<optimized out>) at shell.c:834 ********Crash #456******* ZUFtPSBleHBvcnQgymFjIHpSPSg9XCAgICAEISkgPcJKdCBkYWhpbnN0b3J5LXMgSUZTPSg9PSAg ////gClBOWiWc3Qlau5A/4BwZUpBGupAPQpleHBvcnQgZGFoaWxzdG9yeS1zIElGUz0oPT0BICAg ICEpIHU9LWFubm5ubg== ../output_devel-gff6cfb14_try5/default/crashes/id:000456,sig:06,src:011419,time:30395246,execs:8498269,op:havoc,rep:1: line 1: export: `�ac': not a valid identifier ../output_devel-gff6cfb14_try5/default/crashes/id:000456,sig:06,src:011419,time:30395246,execs:8498269,op:havoc,rep:1: line 1: export: `=�Jt': not a valid identifier ../output_devel-gff6cfb14_try5/default/crashes/id:000456,sig:06,src:011419,time:30395246,execs:8498269,op:havoc,rep:1: line 1: export: `dahinstory-s': not a valid identifier ================================================================= ==7725==ERROR: AddressSanitizer: heap-use-after-free on address 0x503000011230 at pc 0x5555559850b5 bp 0x7fffffff9510 sp 0x7fffffff9508 READ of size 1 at 0x503000011230 thread T0 #0 0x5555559850b4 (/home/nixos/src/bash/nonAFL/bash+0x4310b4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #1 0x55555597a8f2 (/home/nixos/src/bash/nonAFL/bash+0x4268f2) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #2 0x55555599463f (/home/nixos/src/bash/nonAFL/bash+0x44063f) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #3 0x5555559f9699 (/home/nixos/src/bash/nonAFL/bash+0x4a5699) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #4 0x5555559f7bb4 (/home/nixos/src/bash/nonAFL/bash+0x4a3bb4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #5 0x555555971315 (/home/nixos/src/bash/nonAFL/bash+0x41d315) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #6 0x55555599433e (/home/nixos/src/bash/nonAFL/bash+0x44033e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #7 0x5555558e376e (/home/nixos/src/bash/nonAFL/bash+0x38f76e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #8 0x5555558da39e (/home/nixos/src/bash/nonAFL/bash+0x38639e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #9 0x5555558d83c4 (/home/nixos/src/bash/nonAFL/bash+0x3843c4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #10 0x55555588b393 (/home/nixos/src/bash/nonAFL/bash+0x337393) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #11 0x55555588614e (/home/nixos/src/bash/nonAFL/bash+0x33214e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #12 0x7ffff7a2a47d (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a47d) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) #13 0x7ffff7a2a538 (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a538) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) #14 0x555555743b04 (/home/nixos/src/bash/nonAFL/bash+0x1efb04) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) 0x503000011230 is located 0 bytes inside of 30-byte region [0x503000011230,0x50300001124e) freed by thread T0 here: #0 0x555555835838 (/home/nixos/src/bash/nonAFL/bash+0x2e1838) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #1 0x5555559f3850 (/home/nixos/src/bash/nonAFL/bash+0x49f850) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #2 0x5555559f7260 (/home/nixos/src/bash/nonAFL/bash+0x4a3260) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #3 0x5555559f7ae6 (/home/nixos/src/bash/nonAFL/bash+0x4a3ae6) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #4 0x555555971315 (/home/nixos/src/bash/nonAFL/bash+0x41d315) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #5 0x55555599433e (/home/nixos/src/bash/nonAFL/bash+0x44033e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #6 0x5555558e376e (/home/nixos/src/bash/nonAFL/bash+0x38f76e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #7 0x5555558da39e (/home/nixos/src/bash/nonAFL/bash+0x38639e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #8 0x5555558d83c4 (/home/nixos/src/bash/nonAFL/bash+0x3843c4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #9 0x55555588b393 (/home/nixos/src/bash/nonAFL/bash+0x337393) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #10 0x55555588614e (/home/nixos/src/bash/nonAFL/bash+0x33214e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #11 0x7ffff7a2a47d (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a47d) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) previously allocated by thread T0 here: #0 0x555555836807 (/home/nixos/src/bash/nonAFL/bash+0x2e2807) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #1 0x555555a4bb6c (/home/nixos/src/bash/nonAFL/bash+0x4f7b6c) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #2 0x55555590f81c (/home/nixos/src/bash/nonAFL/bash+0x3bb81c) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #3 0x55555590a73a (/home/nixos/src/bash/nonAFL/bash+0x3b673a) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #4 0x55555597108c (/home/nixos/src/bash/nonAFL/bash+0x41d08c) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #5 0x555555972789 (/home/nixos/src/bash/nonAFL/bash+0x41e789) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #6 0x555555a916a3 (/home/nixos/src/bash/nonAFL/bash+0x53d6a3) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #7 0x5555558fe31d (/home/nixos/src/bash/nonAFL/bash+0x3aa31d) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #8 0x5555558e5804 (/home/nixos/src/bash/nonAFL/bash+0x391804) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #9 0x5555558da39e (/home/nixos/src/bash/nonAFL/bash+0x38639e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #10 0x5555558d83c4 (/home/nixos/src/bash/nonAFL/bash+0x3843c4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #11 0x55555588b393 (/home/nixos/src/bash/nonAFL/bash+0x337393) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #12 0x55555588614e (/home/nixos/src/bash/nonAFL/bash+0x33214e) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) #13 0x7ffff7a2a47d (/nix/store/g8zyryr9cr6540xsyg4avqkwgxpnwj2a-glibc-2.40-66/lib/libc.so.6+0x2a47d) (BuildId: 076d831f9114b2d83bda538386af4e9665308c38) SUMMARY: AddressSanitizer: heap-use-after-free (/home/nixos/src/bash/nonAFL/bash+0x4310b4) (BuildId: 85b60cf7d2517cddacac3d0293335e47c5169482) Shadow bytes around the buggy address: 0x503000010f80: fa fa 00 00 00 00 fa fa 00 00 00 00 fa fa 00 00 0x503000011000: 00 00 fa fa fd fd fd fa fa fa 00 00 00 00 fa fa 0x503000011080: 00 00 00 00 fa fa fd fd fd fd fa fa fd fd fd fd 0x503000011100: fa fa 00 00 00 00 fa fa 00 00 00 00 fa fa 00 00 0x503000011180: 00 00 fa fa 00 00 00 00 fa fa 00 00 00 00 fa fa =>0x503000011200: fd fd fd fd fa fa[fd]fd fd fd fa fa 00 00 00 00 0x503000011280: fa fa fd fd fd fd fa fa fd fd fd fd fa fa fd fd 0x503000011300: fd fd fa fa fd fd fd fa fa fa 00 00 00 00 fa fa 0x503000011380: 00 00 05 fa fa fa 00 00 00 fa fa fa 00 00 00 fa 0x503000011400: fa fa 00 00 03 fa fa fa 00 00 00 fa fa fa 00 00 0x503000011480: 06 fa fa fa 00 00 03 fa fa fa 00 00 03 fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb ==7725==ABORTING Program received signal SIGKILL, Killed. 0x0000555555854890 in __sanitizer::internal__exit(int) () (rr) bt #0 0x0000555555854890 in __sanitizer::internal__exit(int) () #1 0x00005555558618d3 in __sanitizer::Die() () #2 0x0000555555840743 in __asan::ScopedInErrorReport::~ScopedInErrorReport() () #3 0x000055555583fd3a in __asan::ReportGenericError(unsigned long, unsigned long, unsigned long, unsigned long, bool, unsigned long, unsigned int, bool) [clone .part.0] () #4 0x0000555555841086 in __asan_report_load1 () #5 0x00005555559850b5 in dequote_escapes (string=0x502000006e70 "==\001\001") at subst.c:4731 #6 0x000055555597a8f3 in remove_quoted_escapes (string=0x502000006e70 "==\001\001") at subst.c:4927 #7 expand_word_internal (word=0x502000005250, quoted=<optimized out>, isexp=<optimized out>, contains_dollar_at=<optimized out>, expanded_something=<optimized out>) at subst.c:11926 #8 0x0000555555994640 in shell_expand_word_list (tlist=0x502000005270, eflags=30) at subst.c:13113 #9 expand_word_list_internal (list=<optimized out>, eflags=<optimized out>) at subst.c:13280 #10 0x00005555559f969a in expand_compound_array_assignment (var=<optimized out>, value=0x502000006d90 "'==\001\001' '!'", flags=<optimized out>) at arrayfunc.c:610 #11 0x00005555559f7bb5 in assign_array_var_from_string (var=0x504000010590, value=0x0, flags=0) at arrayfunc.c:918 #12 0x0000555555971316 in do_compound_assignment (name=0x503000012190 "IFS", value=0x502000006d90 "'==\001\001' '!'", flags=<optimized out>) at subst.c:3503 #13 do_assignment_internal (word=<optimized out>, expand=<optimized out>) at subst.c:3619 #14 0x000055555599433f in do_word_assignment (word=0x1, flags=0) at subst.c:3663 #15 expand_declaration_argument (tlist=0x502000004af0, wcmd=0x502000004bb0) at subst.c:13066 #16 shell_expand_word_list (tlist=0x502000004af0, eflags=31) at subst.c:13109 #17 expand_word_list_internal (list=<optimized out>, eflags=<optimized out>) at subst.c:13280 --Type <RET> for more, q to quit, c to continue without paging--c #18 0x00005555558e376f in execute_simple_command (simple_command=<optimized out>, pipe_in=-1, pipe_out=-1, async=<optimized out>, fds_to_close=<optimized out>) at execute_cmd.c:4617 #19 0x00005555558da39f in execute_command_internal (command=<optimized out>, asynchronous=<optimized out>, pipe_in=<optimized out>, pipe_out=<optimized out>, fds_to_close=<optimized out>) at execute_cmd.c:938 #20 0x00005555558d83c5 in execute_command (command=0x503000011f20) at execute_cmd.c:456 #21 0x000055555588b394 in reader_loop () at eval.c:183 #22 0x000055555588614f in main (argc=2, argv=0x7fffffffa3d8, env=<optimized out>) at shell.c:834 (rr) frame 5 #5 0x00005555559850b5 in dequote_escapes (string=0x502000006e70 "==\001\001") at subst.c:4731 4731 quote_spaces = (ifs_value && *ifs_value == 0); (rr) p ifs_value $1 = 0x503000011230 "\025\002" (rr) ********Crash #458******** ZUFtPSBleHBvcnQgymFjIHpSPSg9XCAgICAEISkgPcJKdCBkYWhpbnN0b3J5LXMgSUZTPSg9PSAg ////gClBOWiWc3Qlau5A/4BwZUpBGupAPQpleHBvcnQgZGFoaWxzdG9yeS1zIElGUz0ooaGhoaGh /jkyUTqxdOz/JCQkNwIkKgIiIjp/CmIBPT0gICAgICEpIHU9LWFubm5ubg==