]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: avoid decrementing iterator before first element 51828/head
authorLucian Petrut <lpetrut@cloudbasesolutions.com>
Thu, 27 Apr 2023 12:44:51 +0000 (12:44 +0000)
committerLucian Petrut <lpetrut@cloudbasesolutions.com>
Tue, 30 May 2023 09:56:03 +0000 (09:56 +0000)
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 <lpetrut@cloudbasesolutions.com>
src/librbd/io/SimpleSchedulerObjectDispatch.cc

index 6b50c46ad528214ee20f4eb9c548b2437ad608b2..cd2ffb1975d183ad2f60aeb586d7209058227c59 100644 (file)
@@ -105,7 +105,8 @@ bool SimpleSchedulerObjectDispatch<I>::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() &&