BASH PATCH REPORT
                             =================

Bash-Release:   5.3
Patch-ID:       bash53-012

Bug-Reported-by:        [email protected]
Bug-Reference-ID:
Bug-Reference-URL:      https://savannah.gnu.org/bugs/?67745

Bug-Description:

If a subshell with an inherited EXIT trap receives a fatal signal before
it clears the exit trap, and before it restores its original signal
handlers, it's possible for it to inappropriately run the inherited EXIT
trap.

Patch (apply with `patch -p0'):

*** ../bash-5.3-patched/execute_cmd.c   Thu Jun  5 11:02:01 2025
--- execute_cmd.c       Fri Jan  9 10:21:30 2026
***************
*** 1644,1648 ****
    if (user_subshell)
      {
!       subshell_environment = SUBSHELL_PAREN;  /* XXX */
        if (asynchronous)
        subshell_environment |= SUBSHELL_ASYNC;
--- 1681,1685 ----
    if (user_subshell)
      {
!       subshell_environment = SUBSHELL_PAREN|SUBSHELL_IGNTRAP; /* XXX */
        if (asynchronous)
        subshell_environment |= SUBSHELL_ASYNC;
***************
*** 1650,1654 ****
    else
      {
!       subshell_environment = 0;                       /* XXX */
        if (asynchronous)
        subshell_environment |= SUBSHELL_ASYNC;
--- 1687,1691 ----
    else
      {
!       subshell_environment = SUBSHELL_IGNTRAP;                        /* XXX 
*/
        if (asynchronous)
        subshell_environment |= SUBSHELL_ASYNC;
*** ../bash-5.3-patched/sig.c   Wed Dec 18 15:52:06 2024
--- sig.c       Fri Jan  9 10:21:43 2026
***************
*** 639,643 ****
    comsub_ignore_return = return_catch_flag = wait_intr_flag = 0;
  
!   run_exit_trap ();   /* XXX - run exit trap possibly in signal context? */
  
    kill_shell (sig);
--- 645,652 ----
    comsub_ignore_return = return_catch_flag = wait_intr_flag = 0;
  
!   /* Don't run the exit trap if we're supposed to be ignoring traps in a
!      subshell environment. */
!   if ((subshell_environment & SUBSHELL_IGNTRAP) == 0)
!     run_exit_trap (); /* XXX - run exit trap possibly in signal context? */
  
    kill_shell (sig);
*** ../bash-5.3/patchlevel.h    2020-06-22 14:51:03.000000000 -0400
--- patchlevel.h        2020-10-01 11:01:28.000000000 -0400
***************
*** 26,30 ****
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 11
  
  #endif /* _PATCHLEVEL_H_ */
--- 26,30 ----
     looks for to find the patch level (for the sccs version string). */
  
! #define PATCHLEVEL 12
  
  #endif /* _PATCHLEVEL_H_ */

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    [email protected]    http://tiswww.cwru.edu/~chet/

Reply via email to