Bug 2211914

Summary: .bashrc bash subshells causing infinite recursion
Product: Red Hat Enterprise Linux 9 Reporter: Ryan Erickson <rerickso>
Component: bashAssignee: Siteshwar Vashisht <svashisht>
Status: CLOSED MIGRATED QA Contact: Karel Volný <kvolny>
Severity: medium Docs Contact:
Priority: medium    
Version: 9.1CC: jjelen
Target Milestone: rcKeywords: MigratedToJIRA, Triaged
Target Release: ---Flags: pm-rhel: mirror+
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2023-09-20 19:33:59 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Ryan Erickson 2023-06-02 14:50:29 UTC
Description of problem:

During any ssh sessions (ssh user@host), any .bashrc lines that call `bash -c` in a subshell will cause an infinite process generation loop via sourcing .bashrc.

ssh user@host
    /etc/profile is sourced and completes successfully
    ~/.bashrc is sourced
        /etc/bashrc is sourced and completes successfully
        ... $(bash -c ls) ... # Subshell to bash is called from .bashrc
            /etc/profile # sourced, completes successfully
            ~/.bashrc # infinite recursion
                /etc/bashrc # sourced, completes successfully
                ... $(bash -c ls) ... # Subshell to bash is called from .bashrc                

Workaround is known (bash -c --norc) but this behavior is not present in RHEL 7 or 8 nor Fedora 37 so it seems there may have been an unintentional regression or a new bug introduced.

Version-Release number of selected component (if applicable):

RHEL 9 with:
openssh-8.7p1-8.el9 (first available for rhel 9)
(and intermittent testing in between)
openssh-8.7p1-29.el9 (latest available for rhel 9)

How reproducible:

Easily, every time.

Steps to Reproduce:
1. Open a console or ssh session to a host for backup purposes (this process requires host reboot a small percentage of the time in the best case, more in the "CTRL-C doesnt stop the loop" case)

2. Add a `$(bash -c)` call to any user's ~/.bashrc

echo 'echo $(bash -c ls)' >> ~/.bashrc

3. SSH to the host (remote to host or localhost to localhost) OR source the ~/.bashrc (but not from console, see below)

# BELOW WILL CAUSE THE LOOP
[from remote] ssh user@host
[from remote] ssh user@host "ls"
[from localhost] ssh user@localhost
[from localhost] ssh user@localhost "ls"
[in any ssh session] source ~/.bashrc


# BELOW WILL NOT CAUSE THE LOOP
[in console or direct session] source ~/.bashrc

4. CTRL-C
Most times, CTRL-C will stop the infinite recursion but leave you in the ssh session
Sometimes, the recursion continues in the background and you will need to manually kill the parent pid or reboot the host


Actual results:

The ssh session hangs while infinite procs are created that source .bashrc and recurse


Expected results:

The ssh session does not infinitely recurse (acts like other test environments eg. RHEL 7, 8 and Fedora 37)

Additional info:

I'm happy to help by answering questions or jumping into a call to describe further. 
Chat/Meet/Slack: rerickso
Thanks!

Comment 1 Dmitry Belyavskiy 2023-06-05 09:22:31 UTC
Dear Ryan,

I don't see any downstream differences in OpenSSH between RHEL 9 and Fedora 37 that could cause this effect. I also don't see any changes upstream affecting shell processing this way.
So I'm not sure that it's an openssh issue and not a bash one.

Comment 2 Ryan Erickson 2023-06-05 17:23:33 UTC
Thanks for looking into it and changing the component Dmitry.

Comment 5 RHEL Program Management 2023-09-20 19:32:08 UTC
Issue migration from Bugzilla to Jira is in process at this time. This will be the last message in Jira copied from the Bugzilla bug.

Comment 6 RHEL Program Management 2023-09-20 19:33:59 UTC
This BZ has been automatically migrated to the issues.redhat.com Red Hat Issue Tracker. All future work related to this report will be managed there.

Due to differences in account names between systems, some fields were not replicated.  Be sure to add yourself to Jira issue's "Watchers" field to continue receiving updates and add others to the "Need Info From" field to continue requesting information.

To find the migrated issue, look in the "Links" section for a direct link to the new issue location. The issue key will have an icon of 2 footprints next to it, and begin with "RHEL-" followed by an integer.  You can also find this issue by visiting https://issues.redhat.com/issues/?jql= and searching the "Bugzilla Bug" field for this BZ's number, e.g. a search like:

"Bugzilla Bug" = 1234567

In the event you have trouble locating or viewing this issue, you can file an issue by sending mail to rh-issues. You can also visit https://access.redhat.com/articles/7032570 for general account information.