1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#! /bin/sh -e
if [ $# -eq 3 -a "$2" = '-d' ]; then
pdir="-d $3"
elif [ $# -ne 1 ]; then
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
fi
case "$1" in
-patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
-unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
*)
echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
exit 1
esac
exit 0
# DP: bash-3.2 upstream patch bash32-015
BASH PATCH REPORT
=================
Bash-Release: 3.2
Patch-ID: bash32-015
Bug-Reported-by:
Bug-Reference-ID:
Bug-Reference-URL:
Bug-Description:
Under certain circumstances, when using FIFOs for process substitution,
bash fails to unlink the FIFOs. This leaves open file descriptors that
can cause the shell to hang and litters the file system.
Patch:
*** ../bash-3.2-patched/execute_cmd.c Fri Mar 2 16:20:50 2007
--- execute_cmd.c Wed Jan 31 23:12:06 2007
***************
*** 3051,3054 ****
--- 3051,3059 ----
command_line = savestring (the_printed_command_except_trap);
+ #if defined (PROCESS_SUBSTITUTION)
+ if ((subshell_environment & SUBSHELL_COMSUB) && (simple_command->flags & CMD_NO_FORK) && fifos_pending() > 0)
+ simple_command->flags &= ~CMD_NO_FORK;
+ #endif
+
execute_disk_command (words, simple_command->redirects, command_line,
pipe_in, pipe_out, async, fds_to_close,
*** ../bash-3.2-patched/subst.c Fri Mar 2 16:20:50 2007
--- subst.c Tue Mar 6 11:40:55 2007
***************
*** 4129,4132 ****
--- 4151,4160 ----
}
+ int
+ fifos_pending ()
+ {
+ return nfifo;
+ }
+
static char *
make_named_pipe ()
***************
*** 4178,4181 ****
--- 4206,4215 ----
}
+ int
+ fifos_pending ()
+ {
+ return 0; /* used for cleanup; not needed with /dev/fd */
+ }
+
void
unlink_fifo_list ()
***************
*** 4671,4674 ****
--- 4719,4725 ----
last_command_exit_value = rc;
rc = run_exit_trap ();
+ #if defined (PROCESS_SUBSTITUTION)
+ unlink_fifo_list ();
+ #endif
exit (rc);
}
*** ../bash-3.2-patched/subst.h Tue Sep 19 08:34:41 2006
--- subst.h Wed Jan 10 09:46:47 2007
***************
*** 223,226 ****
--- 223,227 ----
extern char *pat_subst __P((char *, char *, char *, int));
+ extern int fifos_pending __P((void));
extern void unlink_fifo_list __P((void));
*** ../bash-3.2/patchlevel.h Thu Apr 13 08:31:04 2006
--- patchlevel.h Mon Oct 16 14:22:54 2006
***************
*** 26,30 ****
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 14
#endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
looks for to find the patch level (for the sccs version string). */
! #define PATCHLEVEL 15
#endif /* _PATCHLEVEL_H_ */
|