### Summary

Even though reboot module performs as expected with the versobity 3 (-vvv), when I set it to 4 (-vvvv) it hangs.  I tested 2.9.16, 2.9.27 and 2.12.0.

I specified the `become_method=su`.  When `become_method=sudo`, it timed out after 5 minutes and the job proceeds as expected.



### Issue Type

Bug Report

### Component Name

reboot

### Ansible Version

```console
### RHEL 8.2

$ ansible --version
ansible 2.9.16
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sugimura/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Dec  5 2019, 15:45:45) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]

### RHEL 8.5

$ ansible --version
ansible [core 2.12.0]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sugimura/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/sugimura/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.8.8 (default, Aug 11 2021, 06:52:42) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed
$

(nothing special)
```


### OS / Environment

RHEL 8.2, 8.5 as a control node.  Managed nodes are also RHEL 8.2 and 8.5 that I tested.




### Steps to Reproduce

### playbook.yml

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)
---
- hosts: all
  gather_facts: false
  become: true

  tasks:
    - name: reboot
      reboot:
        post_reboot_delay: 30
```

### inventory

```
$ cat inventory 
### RHEL 8.2
192.168.0.155 ansible_become_method=su
#192.168.0.155 ansible_become_method=sudo

### RHEL 8.5
#192.168.0.154 ansible_become_method=su
#192.168.0.154 ansible_become_method=sudo
#192.168.0.154 ansible_become_method=su ansible_become_password=XXXXXXXX
#192.168.0.154 ansible_become_method=sudo ansible_become_password=XXXXXXXX
```

### command line

When specified `-vvvv`, it hangs.
```
$ ansible-playbook -i inventory playbook.yml -k -K -vvvv
```

On the other hand `-vvv`, it performs successfully.
```
$ ansible-playbook -i inventory playbook.yml -k -K -vvv
```


### Expected Results

It should be the same behavoir as `-vvv` below.

```
$ ansible-playbook -i inventory playbook.yml -k -K -vvv
ansible-playbook [core 2.12.0]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sugimura/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/sugimura/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.8.8 (default, Aug 11 2021, 06:52:42) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = True
Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
...

Escalation succeeded
<192.168.0.155> (0, b'\r\nroot\r\n', b'Shared connection to 192.168.0.155 closed.\r\n')
reboot: system successfully rebooted
<192.168.0.155> ESTABLISH SSH CONNECTION FOR USER: None
<192.168.0.155> SSH: EXEC sshpass -d10 ssh -C -o ControlMaster=auto -o ControlPersist=60s -o ConnectTimeout=10 -o ControlPath=/home/sugimura/.ansible/cp/23220a1dab 192.168.0.155 '/bin/sh -c '"'"'rm -f -r /home/sugimura/.ansible/tmp/ansible-tmp-1641436348.6996555-196425-83290895724414/ > /dev/null 2>&1 && sleep 0'"'"''
<192.168.0.155> (0, b'', b'')
changed: [192.168.0.155] => {
    "changed": true,
    "elapsed": 30,
    "rebooted": true
}
META: ran handlers
META: ran handlers

PLAY RECAP *******************************************************************************************************************************************************************
192.168.0.155              : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
```



### Actual Results

It hangs.

```console
$ ansible-playbook -i inventory playbook.yml -k -K -vvvv
ansible-playbook [core 2.12.0]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sugimura/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/sugimura/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.8.8 (default, Aug 11 2021, 06:52:42) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = True
Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
setting up inventory plugins
...
reboot: rebooting server...
<192.168.0.155> ESTABLISH SSH CONNECTION FOR USER: None
<192.168.0.155> SSH: EXEC sshpass -d10 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o ConnectTimeout=10 -o ControlPath=/home/sugimura/.ansible/cp/23220a1dab -tt 192.168.0.155 '/bin/sh -c '"'"'su  root -c '"'"'"'"'"'"'"'"'/bin/sh -c '"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-vqowuwkomqakrqejoekqdcsybawubrge ; /sbin/shutdown -r 0 "Reboot initiated by Ansible"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"''"'"'"'"'"'"'"'"' && sleep 0'"'"''
Escalation succeeded
<192.168.0.155> (0, b"\r\nShutdown scheduled for Thu 2022-01-06 11:35:37 JST, use 'shutdown -c' to cancel.\r\n", b"OpenSSH_8.0p1, OpenSSL 1.1.1k  FIPS 25 Mar 2021\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug3: /etc/ssh/ssh_config line 52: Including file /etc/ssh/ssh_config.d/05-redhat.conf depth 0\r\ndebug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf\r\ndebug2: checking match for 'final all' host 192.168.0.155 originally 192.168.0.155\r\ndebug3: /etc/ssh/ssh_config.d/05-redhat.conf line 3: not matched 'final'\r\ndebug2: match not found\r\ndebug3: /etc/ssh/ssh_config.d/05-redhat.conf line 5: Including file /etc/crypto-policies/back-ends/openssh.config depth 1 (parse only)\r\ndebug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config\r\ndebug3: gss kex names ok: [gss-curve25519-sha256-,gss-nistp256-sha256-,gss-group14-sha256-,gss-group16-sha512-,gss-gex-sha1-,gss-group14-sha1-]\r\ndebug3: kex names ok: [curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1]\r\ndebug1: configuration requests final Match pass\r\ndebug2: resolve_canonicalize: hostname 192.168.0.155 is address\r\ndebug1: re-parsing configuration\r\ndebug1: Reading configuration data /etc/ssh/ssh_config\r\ndebug3: /etc/ssh/ssh_config line 52: Including file /etc/ssh/ssh_config.d/05-redhat.conf depth 0\r\ndebug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf\r\ndebug2: checking match for 'final all' host 192.168.0.155 originally 192.168.0.155\r\ndebug3: /etc/ssh/ssh_config.d/05-redhat.conf line 3: matched 'final'\r\ndebug2: match found\r\ndebug3: /etc/ssh/ssh_config.d/05-redhat.conf line 5: Including file /etc/crypto-policies/back-ends/openssh.config depth 1\r\ndebug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config\r\ndebug3: gss kex names ok: [gss-curve25519-sha256-,gss-nistp256-sha256-,gss-group14-sha256-,gss-group16-sha512-,gss-gex-sha1-,gss-group14-sha1-]\r\ndebug3: kex names ok: [curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1]\r\ndebug1: auto-mux: Trying existing master\r\ndebug2: fd 4 setting O_NONBLOCK\r\ndebug2: mux_client_hello_exchange: master version 4\r\ndebug3: mux_client_forwards: request forwardings: 0 local, 0 remote\r\ndebug3: mux_client_request_session: entering\r\ndebug3: mux_client_request_alive: entering\r\ndebug3: mux_client_request_alive: done pid = 196492\r\ndebug3: mux_client_request_session: session request sent\r\ndebug3: mux_client_read_packet: read header failed: Broken pipe\r\ndebug2: Received exit status from master 0\r\nShared connection to 192.168.0.155 closed.\r\n")
reboot: waiting an additional 30 seconds
reboot: validating reboot
reboot: attempting to get system boot time
<192.168.0.155> ESTABLISH SSH CONNECTION FOR USER: None
<192.168.0.155> SSH: EXEC sshpass -d10 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o ConnectTimeout=10 -o ControlPath=/home/sugimura/.ansible/cp/23220a1dab -tt 192.168.0.155 '/bin/sh -c '"'"'su  root -c '"'"'"'"'"'"'"'"'/bin/sh -c '"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-fwhdcdmwvpurpzythdrmsmpewqactjox ; cat /proc/sys/kernel/random/boot_id'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"'"''"'"'"'"'"'"'"'"' && sleep 0'"'"''
Escalation succeeded
```

And here is the output with `ANSIBLE_DEBUG=1`.

```
$ ANSIBLE_DEBUG=1 ansible-playbook -i inventory playbook.yml -k -K -vvvv
196531 1641436626.42119: starting run
ansible-playbook [core 2.12.0]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/sugimura/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.8/site-packages/ansible
  ansible collection location = /home/sugimura/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible-playbook
  python version = 3.8.8 (default, Aug 11 2021, 06:52:42) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
  jinja version = 2.10.3
  libyaml = True
Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
196531 1641436629.13508: Added group all to inventory
196531 1641436629.13525: Added group ungrouped to inventory
196531 1641436629.13535: Group all now contains ungrouped
...
196536 1641436660.99666: become_success: (source=stderr, state=awaiting_prompt): 'debug2: mux_master_process_new_session: channel 1: request tty 1, X 0, agent 0, subsys 0, term "xterm-256color", cmd "/bin/sh -c 'su  root -c '"'"'/bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-ozdcnvzirtcdftqbszityhfgcukzjzoe ; cat /proc/sys/kernel/random/boot_id'"'"'"'"'"'"'"'"''"'"' && sleep 0'", env 1'
Escalation succeeded
196536 1641436661.18745: stderr chunk (state=3):
>>>debug3: receive packet: type 80
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
<<<
196536 1641436661.22876: stderr chunk (state=3):
>>>debug3: receive packet: type 91
debug2: channel_input_open_confirmation: channel 2: callback start
debug2: client_session2_setup: id 2
debug2: channel 2: request pty-req confirm 1
debug3: send packet: type 98
<<<
196536 1641436661.22899: stderr chunk (state=3):
>>>debug1: Sending environment.
debug1: Sending env LANG = ja_JP.UTF-8
debug2: channel 2: request env confirm 0
debug3: send packet: type 98
debug1: Sending command: /bin/sh -c 'su  root -c '"'"'/bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-ozdcnvzirtcdftqbszityhfgcukzjzoe ; cat /proc/sys/kernel/random/boot_id'"'"'"'"'"'"'"'"''"'"' && sleep 0'
debug2: channel 2: request exec confirm 1
debug3: send packet: type 98
debug3: mux_session_confirm: sending success reply
debug2: channel_input_open_confirmation: channel 2: callback done
debug2: channel 2: open confirm rwindow 0 rmax 32768
<<<
196536 1641436661.23997: stderr chunk (state=3):
>>>debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 2
debug2: PTY allocation request accepted on channel 2
debug2: channel 2: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 2
debug2: exec request accepted on channel 2
<<<
196536 1641436661.61510: stdout chunk (state=3):
>>>パスワード:<<<
```

The `パスワード:` means `Password:` in Japanese.  I tested with `LANG=C`, it is the same behavior.

```
...
debug1: Sending command: /bin/sh -c 'su  root -c '"'"'/bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-xmjdcyhcajgoprxvrmtkyqdyufnzfdeo ; cat /proc/sys/kernel/random/boot_id'"'"'"'"'"'"'"'"''"'"' && sleep 0'
debug2: channel 2: request exec confirm 1
debug3: send packet: type 98
<<<
196581 1641436784.82305: stderr chunk (state=3):
>>>debug3: mux_session_confirm: sending success reply
debug2: channel_input_open_confirmation: channel 2: callback done
debug2: channel 2: open confirm rwindow 0 rmax 32768
<<<
196581 1641436784.83332: stderr chunk (state=3):
>>>debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 2
debug2: PTY allocation request accepted on channel 2
debug2: channel 2: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 2
debug2: exec request accepted on channel 2
<<<
196581 1641436785.19981: stdout chunk (state=3):
>>>Password: <<<
```
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
        Takes a command array and scans it for ControlPersist and ControlPath
        settings and returns two booleans indicating whether either was found.
        This could be smarter, e.g. returning false if ControlPersist is 'no',
        but for now we do it simple way.
        '''
        controlpersist = False
        controlpath = False
        for b_arg in (a.lower() for a in b_command):
            if b'controlpersist' in b_arg:
                controlpersist = True
            elif b'controlpath' in b_arg:
                controlpath = True
        return controlpersist, controlpath
    def _add_args(self, b_command, b_args, explanation):
        """
        Adds arguments to the ssh command and displays a caller-supplied explanation of why.
        :arg b_command: A list containing the command to add the new arguments to.
            This list will be modified by this method.
        :arg b_args: An iterable of new arguments to add.  This iterable is used
            more than once so it must be persistent (ie: a list is okay but a
            StringIO would not)
        :arg explanation: A text string containing explaining why the arguments
            were added.  It will be displayed with a high enough verbosity.
        .. note:: This function does its work via side-effect.  The b_command list has the new arguments appended.
        """
        display.vvvvv(u'SSH: %s: (%s)' % (explanation, ')('.join(to_text(a) for a in b_args)), host=self.host)
        b_command += b_args
    def _build_command(self, binary, subsystem, *other_args):