fix deadlock in trap, backported from devel branch
Signed-off-by: Roman Rakus <rrakus@redhat.com>
This commit is contained in:
		
							parent
							
								
									f6ffed783f
								
							
						
					
					
						commit
						185aa1593d
					
				
							
								
								
									
										60
									
								
								bash-4.2-trap.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								bash-4.2-trap.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,60 @@
 | 
			
		||||
commit 41d203e21f94c1b8bfc457606ee633c22da3cf04
 | 
			
		||||
Author: Chet Ramey <chet.ramey@case.edu>
 | 
			
		||||
Date:   Wed Jun 12 09:29:51 2013 -0400
 | 
			
		||||
 | 
			
		||||
    commit bash-20130523 snapshot
 | 
			
		||||
 | 
			
		||||
diff --git a/trap.c b/trap.c
 | 
			
		||||
index 1e11d1f..da59b26 100644
 | 
			
		||||
--- a/trap.c
 | 
			
		||||
+++ b/trap.c
 | 
			
		||||
@@ -286,6 +286,9 @@ run_pending_traps ()
 | 
			
		||||
   if (catch_flag == 0)		/* simple optimization */
 | 
			
		||||
     return;
 | 
			
		||||
 
 | 
			
		||||
+  if (running_trap > 0)
 | 
			
		||||
+    return;			/* no recursive trap invocations */
 | 
			
		||||
+
 | 
			
		||||
   catch_flag = trapped_signal_received = 0;
 | 
			
		||||
 
 | 
			
		||||
   /* Preserve $? when running trap. */
 | 
			
		||||
@@ -304,6 +307,8 @@ run_pending_traps ()
 | 
			
		||||
 
 | 
			
		||||
 	  BLOCK_SIGNAL (sig, set, oset);
 | 
			
		||||
 
 | 
			
		||||
+	  running_trap = sig + 1;
 | 
			
		||||
+
 | 
			
		||||
 	  if (sig == SIGINT)
 | 
			
		||||
 	    {
 | 
			
		||||
 	      run_interrupt_trap ();
 | 
			
		||||
@@ -324,6 +329,7 @@ run_pending_traps ()
 | 
			
		||||
 	    {
 | 
			
		||||
 	      /* This can happen when run_pending_traps is called while
 | 
			
		||||
 		 running a SIGCHLD trap handler. */
 | 
			
		||||
+	      running_trap = 0;
 | 
			
		||||
 	      UNBLOCK_SIGNAL (oset);
 | 
			
		||||
 	      continue;					/* XXX */
 | 
			
		||||
 	    }
 | 
			
		||||
@@ -359,7 +365,14 @@ run_pending_traps ()
 | 
			
		||||
 	      save_subst_varlist = subst_assign_varlist;
 | 
			
		||||
 	      subst_assign_varlist = 0;
 | 
			
		||||
 
 | 
			
		||||
+#if defined (JOB_CONTROL)
 | 
			
		||||
+	      save_pipeline (1);	/* XXX only provides one save level */
 | 
			
		||||
+#endif
 | 
			
		||||
 	      evalstring (savestring (trap_list[sig]), "trap", SEVAL_NONINT|SEVAL_NOHIST|SEVAL_RESETLINE);
 | 
			
		||||
+#if defined (JOB_CONTROL)
 | 
			
		||||
+	      restore_pipeline (1);
 | 
			
		||||
+#endif
 | 
			
		||||
+
 | 
			
		||||
 	      restore_token_state (token_state);
 | 
			
		||||
 	      free (token_state);
 | 
			
		||||
 
 | 
			
		||||
@@ -367,6 +380,7 @@ run_pending_traps ()
 | 
			
		||||
 	    }
 | 
			
		||||
 
 | 
			
		||||
 	  pending_traps[sig] = 0;
 | 
			
		||||
+	  running_trap = 0;
 | 
			
		||||
 
 | 
			
		||||
 	  UNBLOCK_SIGNAL (oset);
 | 
			
		||||
 	}
 | 
			
		||||
@ -6,7 +6,7 @@
 | 
			
		||||
Version: %{baseversion}%{patchleveltag}
 | 
			
		||||
Name: bash
 | 
			
		||||
Summary: The GNU Bourne Again shell
 | 
			
		||||
Release: 1%{?dist}
 | 
			
		||||
Release: 2%{?dist}
 | 
			
		||||
Group: System Environment/Shells
 | 
			
		||||
License: GPLv3+
 | 
			
		||||
Url: http://www.gnu.org/software/bash
 | 
			
		||||
@ -115,6 +115,9 @@ Patch125: bash-4.2-size_type.patch
 | 
			
		||||
# 903833, Fix missing close(), fixes fd leaks
 | 
			
		||||
Patch126: bash-4.2-missing_closes.patch
 | 
			
		||||
 | 
			
		||||
# fix deadlock in trap, backported from devel branch
 | 
			
		||||
Patch127: bash-4.2-trap.patch
 | 
			
		||||
 | 
			
		||||
BuildRequires: texinfo bison
 | 
			
		||||
BuildRequires: ncurses-devel
 | 
			
		||||
BuildRequires: autoconf, gettext
 | 
			
		||||
@ -408,6 +411,10 @@ end
 | 
			
		||||
#%doc doc/*.ps doc/*.0 doc/*.html doc/article.txt
 | 
			
		||||
 | 
			
		||||
%changelog
 | 
			
		||||
* Thu Jun 27 2013 Roman Rakus <rrakus@redhat.com> - 4.2.45-2
 | 
			
		||||
- Fixed a bug that caused trap handlers to be executed recursively,
 | 
			
		||||
  corrupting internal data structures.
 | 
			
		||||
 | 
			
		||||
* Mon Mar 11 2013 Roman Rakus <rrakus@redhat.com> - 4.2.45-1
 | 
			
		||||
- Patchlevel 45
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user