summaryrefslogtreecommitdiff
path: root/source/a/bash/bash-4.4-patches/bash44-004
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/bash/bash-4.4-patches/bash44-004')
-rw-r--r--source/a/bash/bash-4.4-patches/bash44-00484
1 files changed, 84 insertions, 0 deletions
diff --git a/source/a/bash/bash-4.4-patches/bash44-004 b/source/a/bash/bash-4.4-patches/bash44-004
new file mode 100644
index 00000000..1d8af26a
--- /dev/null
+++ b/source/a/bash/bash-4.4-patches/bash44-004
@@ -0,0 +1,84 @@
+ BASH PATCH REPORT
+ =================
+
+Bash-Release: 4.4
+Patch-ID: bash44-004
+
+Bug-Reported-by: Christian Weisgerber <naddy@mips.inka.de>
+Bug-Reference-ID: <20161101160302.GB54856@lorvorc.mips.inka.de>
+Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2016-11/msg00004.html
+
+Bug-Description:
+
+There is a race condition that can result in bash referencing freed memory
+when freeing data associated with the last process substitution.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-4.4/jobs.c 2016-08-23 16:38:44.000000000 -0400
+--- jobs.c 2016-11-02 18:24:45.000000000 -0400
+***************
+*** 454,457 ****
+--- 454,472 ----
+ }
+
++ void
++ discard_last_procsub_child ()
++ {
++ PROCESS *disposer;
++ sigset_t set, oset;
++
++ BLOCK_CHILD (set, oset);
++ disposer = last_procsub_child;
++ last_procsub_child = (PROCESS *)NULL;
++ UNBLOCK_CHILD (oset);
++
++ if (disposer)
++ discard_pipeline (disposer);
++ }
++
+ struct pipeline_saver *
+ alloc_pipeline_saver ()
+*** ../bash-4.4/jobs.h 2016-04-27 10:35:51.000000000 -0400
+--- jobs.h 2016-11-02 18:25:08.000000000 -0400
+***************
+*** 191,194 ****
+--- 191,195 ----
+ extern void stop_making_children __P((void));
+ extern void cleanup_the_pipeline __P((void));
++ extern void discard_last_procsub_child __P((void));
+ extern void save_pipeline __P((int));
+ extern PROCESS *restore_pipeline __P((int));
+*** ../bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400
+--- subst.c 2016-11-02 18:23:24.000000000 -0400
+***************
+*** 5809,5816 ****
+ #if defined (JOB_CONTROL)
+ if (last_procsub_child)
+! {
+! discard_pipeline (last_procsub_child);
+! last_procsub_child = (PROCESS *)NULL;
+! }
+ last_procsub_child = restore_pipeline (0);
+ #endif
+--- 5834,5838 ----
+ #if defined (JOB_CONTROL)
+ if (last_procsub_child)
+! discard_last_procsub_child ();
+ last_procsub_child = restore_pipeline (0);
+ #endif
+*** ../bash-4.4/patchlevel.h 2016-06-22 14:51:03.000000000 -0400
+--- patchlevel.h 2016-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 3
+
+ #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+ looks for to find the patch level (for the sccs version string). */
+
+! #define PATCHLEVEL 4
+
+ #endif /* _PATCHLEVEL_H_ */