From: Radoslaw Zarzynski Date: Thu, 14 May 2020 10:17:05 +0000 (+0200) Subject: crimson/osd: fix key num handling in PGBackend::omap_get_keys(). X-Git-Tag: v16.1.0~2339^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F35066%2Fhead;p=ceph.git crimson/osd: fix key num handling in PGBackend::omap_get_keys(). The patch fixes running-out-of-buffer when decoding the data from `omap_get_keys()`. In some cases, the declared number of encoded keys is greater by 1 from the actual causing execption `buffer::end_of_buffer` to be thrown at decoder. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/pg_backend.cc b/src/crimson/osd/pg_backend.cc index 0e67167d3ae1..a5deceb08924 100644 --- a/src/crimson/osd/pg_backend.cc +++ b/src/crimson/osd/pg_backend.cc @@ -528,12 +528,13 @@ seastar::future<> PGBackend::omap_get_keys( bool truncated = false; uint32_t num = 0; for (auto& [key, val] : std::get<1>(ret)) { - if (num++ >= max_return || + if (num >= max_return || result.length() >= local_conf()->osd_max_omap_bytes_per_request) { truncated = true; break; } encode(key, result); + ++num; } encode(num, osd_op.outdata); osd_op.outdata.claim_append(result);