<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY

After upgrading ansible-base from 2.10.5 to 2.10.6, I can no longer run sudo commands on localhost. I noticed that disabling SSH pipelinging allows sudo commands to run again. The issue also affects latest git version.

git bisect points to 3ef061bdc4610bbf213f70bc70976fdc3005e2cc, which is from #73281 (2.10), #73023 (devel)

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
connection

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
$ ~/.local/bin/ansible --version
[WARNING]: You are running the development version of Ansible. You should only run Ansible from "devel" if you are modifying the Ansible engine, or trying
out features under development. This is a rapidly changing source of code and can become unstable at any point.
ansible 2.11.0.dev0 (devel 5078a0baa2) last updated 2021/02/21 17:08:03 (GMT +800)
  config file = /home/yen/tmp/ansible-bug/ansible.cfg
  configured module search path = ['/home/yen/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/yen/tmp/ansible/lib/ansible
  ansible collection location = /home/yen/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/yen/.local/bin/ansible
  python version = 3.9.1 (default, Feb  6 2021, 06:49:13) [GCC 10.2.0]
  jinja version = 2.11.3
  libyaml = True
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
$ ~/.local/bin/ansible-config dump --only-changed
[WARNING]: You are running the development version of Ansible. You should only run Ansible from "devel" if you are modifying the Ansible engine, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point.
ANSIBLE_PIPELINING(/home/yen/tmp/ansible-bug/ansible.cfg) = True
ANSIBLE_SSH_CONTROL_PATH_DIR(env: ANSIBLE_SSH_CONTROL_PATH_DIR) = /run/user/1000/ansible/cp
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
Controller & target: Arch Linux, sudo 1.9.5.p2
Networking: should be irrelevant

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

```
$ cat ansible.cfg
[ssh_connection]
pipelining = True
$ cat inventory
localhost ansible_connection=local
$ ~/.local/bin/ansible -i inventory localhost -m ping --become --ask-become-pass -vvvvvv
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS

I got a pong response

##### ACTUAL RESULTS

```paste below
[WARNING]: You are running the development version of Ansible. You should only run Ansible from "devel" if you are modifying the Ansible engine, or trying out features under development. This is a rapidly changing source of code and can become unstable at any point.
ansible 2.11.0.dev0 (devel 5078a0baa2) last updated 2021/02/21 17:08:03 (GMT +800)
  config file = /home/yen/tmp/ansible-bug/ansible.cfg
  configured module search path = ['/home/yen/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/yen/tmp/ansible/lib/ansible
  ansible collection location = /home/yen/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/yen/.local/bin/ansible
  python version = 3.9.1 (default, Feb  6 2021, 06:49:13) [GCC 10.2.0]
  jinja version = 2.11.3
  libyaml = True
Using /home/yen/tmp/ansible-bug/ansible.cfg as config file
BECOME password:
setting up inventory plugins
host_list declined parsing /home/yen/tmp/ansible-bug/inventory as it did not pass its verify_file() method
script declined parsing /home/yen/tmp/ansible-bug/inventory as it did not pass its verify_file() method
auto declined parsing /home/yen/tmp/ansible-bug/inventory as it did not pass its verify_file() method
Set default localhost to localhost
Parsed /home/yen/tmp/ansible-bug/inventory inventory source with ini plugin
Loading callback plugin minimal of type stdout, v2.0 from /home/yen/tmp/ansible/lib/ansible/plugins/callback/minimal.py
Attempting to use 'default' callback.
Skipping callback 'default', as we already have a stdout callback.
Attempting to use 'junit' callback.
Attempting to use 'minimal' callback.
Skipping callback 'minimal', as we already have a stdout callback.
Attempting to use 'oneline' callback.
Skipping callback 'oneline', as we already have a stdout callback.
Attempting to use 'tree' callback.
META: ran handlers
Including module_utils file ansible/__init__.py
Including module_utils file ansible/module_utils/__init__.py
Including module_utils file ansible/module_utils/basic.py
Including module_utils file ansible/module_utils/_text.py
Including module_utils file ansible/module_utils/common/_collections_compat.py
Including module_utils file ansible/module_utils/common/__init__.py
Including module_utils file ansible/module_utils/common/_json_compat.py
Including module_utils file ansible/module_utils/common/_utils.py
Including module_utils file ansible/module_utils/common/file.py
Including module_utils file ansible/module_utils/common/parameters.py
Including module_utils file ansible/module_utils/common/collections.py
Including module_utils file ansible/module_utils/common/process.py
Including module_utils file ansible/module_utils/common/sys_info.py
Including module_utils file ansible/module_utils/common/text/converters.py
Including module_utils file ansible/module_utils/common/text/__init__.py
Including module_utils file ansible/module_utils/common/text/formatters.py
Including module_utils file ansible/module_utils/common/validation.py
Including module_utils file ansible/module_utils/common/warnings.py
Including module_utils file ansible/module_utils/compat/selectors.py
Including module_utils file ansible/module_utils/compat/__init__.py
Including module_utils file ansible/module_utils/compat/_selectors2.py
Including module_utils file ansible/module_utils/compat/selinux.py
Including module_utils file ansible/module_utils/distro/__init__.py
Including module_utils file ansible/module_utils/distro/_distro.py
Including module_utils file ansible/module_utils/parsing/convert_bool.py
Including module_utils file ansible/module_utils/parsing/__init__.py
Including module_utils file ansible/module_utils/pycompat24.py
Including module_utils file ansible/module_utils/six/__init__.py
<localhost> Attempting python interpreter discovery
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: yen
<localhost> EXEC /bin/sh -c 'echo PLATFORM; uname; echo FOUND; command -v '"'"'/usr/bin/python'"'"'; command -v '"'"'python3.9'"'"'; command -v '"'"'python3.8'"'"'; command -v '"'"'python3.7'"'"'; command -v '"'"'python3.6'"'"'; command -v '"'"'python3.5'"'"'; command -v '"'"'python2.7'"'"'; command -v '"'"'python2.6'"'"'; command -v '"'"'/usr/libexec/platform-python'"'"'; command -v '"'"'/usr/bin/python3'"'"'; command -v '"'"'python'"'"'; echo ENDFOUND && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python && sleep 0'
<localhost> Python interpreter discovery fallback (unable to get Linux distribution/version info)
Using module file /home/yen/tmp/ansible/lib/ansible/modules/ping.py
Pipelining is enabled.
<localhost> EXEC /bin/sh -c 'sudo -H -S  -p "[sudo via ansible, key=gocqypxznauqdyyqcjlbajubbcpgfkxz] password:" -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-gocqypxznauqdyyqcjlbajubbcpgfkxz ; /usr/bin/python'"'"' && sleep 0'
```

And then hangs forever.
'''
        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._play_context.remote_addr)
        b_command += b_args
    def _build_command(self, binary, subsystem, *other_args):