From: Lucian Petrut Date: Thu, 27 Apr 2023 12:44:51 +0000 (+0000) Subject: librbd: avoid decrementing iterator before first element X-Git-Tag: v18.1.2~46^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=fabca81423b5270f3143baa636079b5c40edfba2;p=ceph-ci.git 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 (cherry picked from commit ca65e85575f7b35ce679309e92e0c9bee8d6b96a) --- diff --git a/src/librbd/io/SimpleSchedulerObjectDispatch.cc b/src/librbd/io/SimpleSchedulerObjectDispatch.cc index 6b50c46ad52..cd2ffb1975d 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() &&