]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
rgw: Fix segfault due to concurrent socket use at timeout 50240/head
authorYixin Jin <yjin77@yahoo.ca>
Wed, 15 Feb 2023 17:08:19 +0000 (17:08 +0000)
committerCasey Bodley <cbodley@redhat.com>
Thu, 23 Feb 2023 19:04:27 +0000 (14:04 -0500)
commit6a620c243d177d3b3c1ce3d0b65942309a3b377b
tree1938fa2295be9412a3d9dcacb3821883551cdb10
parent01bc8914d4dda1f04e0a314f0ec1e1cbb4e6e512
rgw: Fix segfault due to concurrent socket use at timeout

This commit fixes a potential segfault risk when
rgw timeout handler works on the socket in one
thread while it is concurrently used by another.
The details of the fix are:

1. Instead of calling socket close(), which resets
descriptor_data in boost::asio socket and risks
segfault due to concurrent use of the socket,
the timeout handler now calls cancel() to abort
all pending ops followed by shutdown() to disable
the underlying transport. The eventual closure of
the socket will be done in the socket destructor.

2. Expose the actual boost::asio socket via get_socket()
from Connection so that the timeout handler can call
cancel() and shutdown() on it, although the socket data
member is already accessible. It allows future expansion
that wants to hide the socket even though it renders the
existing close() less useful.

Fixes: https://tracker.ceph.com/issues/58670
Signed-off-by: Yixin Jin <yjin77@yahoo.ca>
(cherry picked from commit 6d5988cbdab48705414e311217c61d3c798085d8)
src/rgw/rgw_asio_frontend.cc
src/rgw/rgw_asio_frontend_timer.h