]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commit
Bluetooth: fix repeated calls to sco_sock_kill
authorDesmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
Tue, 10 Aug 2021 04:14:10 +0000 (12:14 +0800)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 15 Oct 2021 09:27:06 +0000 (11:27 +0200)
commite0126aa0b92d6179a14b691ca4adbbe04666fa67
treee3e05df97cba111921df00ec5d20371a0be734e5
parent84f7907ded4abf70c810ec7df0136b5bfb891d0b
Bluetooth: fix repeated calls to sco_sock_kill

BugLink: https://bugs.launchpad.net/bugs/1946788
[ Upstream commit e1dee2c1de2b4dd00eb44004a4bda6326ed07b59 ]

In commit 4e1a720d0312 ("Bluetooth: avoid killing an already killed
socket"), a check was added to sco_sock_kill to skip killing a socket
if the SOCK_DEAD flag was set.

This was done after a trace for a use-after-free bug showed that the
same sock pointer was being killed twice.

Unfortunately, this check prevents sco_sock_kill from running on any
socket. sco_sock_kill kills a socket only if it's zapped and orphaned,
however sock_orphan announces that the socket is dead before detaching
it. i.e., orphaned sockets have the SOCK_DEAD flag set.

To fix this, we remove the check for SOCK_DEAD, and avoid repeated
calls to sco_sock_kill by removing incorrect calls in:

1. sco_sock_timeout. The socket should not be killed on timeout as
further processing is expected to be done. For example,
sco_sock_connect sets the timer then waits for the socket to be
connected or for an error to be returned.

2. sco_conn_del. This function should clean up resources for the
connection, but the socket itself should be cleaned up in
sco_sock_release.

3. sco_sock_close. Calls to sco_sock_close in sco_sock_cleanup_listen
and sco_sock_release are followed by sco_sock_kill. Hence the
duplicated call should be removed.

Fixes: 4e1a720d0312 ("Bluetooth: avoid killing an already killed socket")
Signed-off-by: Desmond Cheong Zhi Xi <desmondcheongzx@gmail.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Kelsey Skunberg <kelsey.skunberg@canonical.com>
net/bluetooth/sco.c