From 3e70f3d662e3c051352e342fe89cd3b2186f4cb5 Mon Sep 17 00:00:00 2001 From: Jesse Williamson Date: Tue, 13 Jun 2017 12:31:16 -0700 Subject: [PATCH] libradosstriper: remove format injection vulnerability Fixes: http://tracker.ceph.com/issues/20240 Signed-off-by: Stan K (cherry picked from commit e94d3b9661d287e500cdf4e6c102d2e3bb04475e) --- src/libradosstriper/RadosStriperImpl.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/libradosstriper/RadosStriperImpl.cc b/src/libradosstriper/RadosStriperImpl.cc index c2fc16b902535..54b40c1452ef3 100644 --- a/src/libradosstriper/RadosStriperImpl.cc +++ b/src/libradosstriper/RadosStriperImpl.cc @@ -12,6 +12,8 @@ * */ +#include + #include "libradosstriper/RadosStriperImpl.h" #include @@ -466,7 +468,9 @@ int libradosstriper::RadosStriperImpl::aio_read(const std::string& soid, // get list of extents to be read from vector *extents = new vector(); if (read_len > 0) { - std::string format = soid + RADOS_OBJECT_EXTENSION_FORMAT; + std::string format = soid; + boost::replace_all(format, "%", "%%"); + format += RADOS_OBJECT_EXTENSION_FORMAT; file_layout_t l; l.from_legacy(layout); Striper::file_to_extents(cct(), format.c_str(), &l, off, read_len, @@ -781,7 +785,9 @@ libradosstriper::RadosStriperImpl::internal_aio_write(const std::string& soid, if (len > 0) { // get list of extents to be written to vector extents; - std::string format = soid + RADOS_OBJECT_EXTENSION_FORMAT; + std::string format = soid; + boost::replace_all(format, "%", "%%"); + format += RADOS_OBJECT_EXTENSION_FORMAT; file_layout_t l; l.from_legacy(layout); Striper::file_to_extents(cct(), format.c_str(), &l, off, len, 0, extents); -- 2.39.5