From 4d93b817ab9a3edcac193ab5699cb9ffb05478e9 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Thu, 14 May 2020 12:17:05 +0200 Subject: [PATCH] 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 --- src/crimson/osd/pg_backend.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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); -- 2.47.3