Bash leaks memory when doing function calls while reading from subshell as stdin

2017-12-07 Thread Øyvind Hvidsten

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

2017-12-07 Thread Øyvind Hvidsten

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

2017-12-07 Thread Natanael Copa
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