Bash leaks memory when doing function calls while reading from subshell as stdin
Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I../. -I.././include -I.././lib -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefix-map=/build/bash-7fckc0/bash-4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -no-pie -Wno-parentheses -Wno-format-security uname output: Linux vampiric 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu Bash Version: 4.4 Patch Level: 12 Release Status: release Description: An alternative version of the memory leak script, for those who blame the buffer from the subshell :) It's a lot slower to leak, but it leaks. Repeat-By: f2() { return 1; } f1() { while read -r line; do f2 done < <( for ((i=0;i<10;i++)); do printf '%s\n' "$i" done ) } while true; do f1 done
Bash leaks memory when doing function calls while reading from subshell as stdin
Configuration Information [Automatically generated, do not change]: Machine: x86_64 OS: linux-gnu Compiler: gcc Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL -DHAVE_CONFIG_H -I. -I../. -I.././include -I.././lib -Wdate-time -D_FORTIFY_SOURCE=2 -g -O2 -fdebug-prefix-map=/build/bash-7fckc0/bash-4.4=. -fstack-protector-strong -Wformat -Werror=format-security -Wall -no-pie -Wno-parentheses -Wno-format-security uname output: Linux vampiric 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux Machine Type: x86_64-pc-linux-gnu Bash Version: 4.4 Patch Level: 12 Release Status: release Description: Somehow the included script causes a memory leak. Memory usage will grow huge over a very short timeframe. The script is pointless, but cut down from a larger one that does something useful. Originally, the subshell was reading a while (cat ...), so the printf loop has nothing to do with it. Replacing the call to f2() with an echo, or anything not a function call, makes it not leak. Repeat-By: f2() { return 1; } f1() { while read -r line; do f2 "test" done < <( for ((i=0;i<10;i++)); do printf '%s\n' "$i" done ) } f1
[PATCH] Fix overflow in jobs
This fixes an issue with bash hanging if user process rlimit is too high. To reproduce: ulimit -u 9223372036854775807 bash -c 'sleep 1 & wait $!' --- jobs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jobs.c b/jobs.c index fc966036..d203db27 100644 --- a/jobs.c +++ b/jobs.c @@ -765,7 +765,7 @@ bgp_resize () else nsize = bgpids.nalloc; - while (nsize < js.c_childmax) + while (nsize < (ps_index_t)js.c_childmax) nsize *= 2; if (bgpids.nalloc < js.c_childmax) -- 2.15.0