From ca65e85575f7b35ce679309e92e0c9bee8d6b96a Mon Sep 17 00:00:00 2001 From: Lucian Petrut Date: Thu, 27 Apr 2023 12:44:51 +0000 Subject: [PATCH] librbd: avoid decrementing iterator before first element While trying to merge delayed requests, SimpleSchedulerObjectDispatch can end up iterating before the first element. With llvm, this leads to a crash: https://paste.opendev.org/raw/bxnQqqDtIrkOfVvRfkZ6/ This change adds a check, ensuring that we won't decrement the iterator before the first map element. Fixes: https://tracker.ceph.com/issues/61503 Signed-off-by: Lucian Petrut --- src/librbd/io/SimpleSchedulerObjectDispatch.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/librbd/io/SimpleSchedulerObjectDispatch.cc b/src/librbd/io/SimpleSchedulerObjectDispatch.cc index 6b50c46ad5282..cd2ffb1975d18 100644 --- a/src/librbd/io/SimpleSchedulerObjectDispatch.cc +++ b/src/librbd/io/SimpleSchedulerObjectDispatch.cc @@ -105,7 +105,8 @@ bool SimpleSchedulerObjectDispatch::ObjectRequests::try_delay_request( // try to merge back to an existing request iter = m_delayed_requests.lower_bound(object_off); - if (iter == m_delayed_requests.end() || iter->first > object_off) { + if (iter != m_delayed_requests.begin() && + (iter == m_delayed_requests.end() || iter->first > object_off)) { iter--; } if (iter != m_delayed_requests.end() && -- 2.39.5