From 0a80c68b90da639b88b98e31fdefee0535409cb2 Mon Sep 17 00:00:00 2001 From: luo rixin Date: Fri, 22 Jul 2022 16:48:14 +0800 Subject: [PATCH] crimson/osd/osd: fix sigsegv caused by reusing the moved objcect In some case, `m` will be moved and setted nullptr before `m->get_spg()` be called, causing a segmentation fault. Signed-off-by: luo rixin --- src/crimson/osd/osd.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index c940196426ef6..a964523c5569d 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -1036,8 +1036,9 @@ seastar::future<> OSD::handle_rep_op(crimson::net::ConnectionRef conn, seastar::future<> OSD::handle_rep_op_reply(crimson::net::ConnectionRef conn, Ref m) { + spg_t pgid = m->get_spg(); return pg_shard_manager.with_pg( - m->get_spg(), + pgid, [conn=std::move(conn), m=std::move(m)](auto &&pg) { if (pg) { m->finish_decode();