#define RBD_DIR_ID_KEY_PREFIX "id_"
#define RBD_DIR_NAME_KEY_PREFIX "name_"
#define RBD_METADATA_KEY_PREFIX "metadata_"
+#define RBD_MAX_OBJECT_MAP_OBJECT_COUNT 256000000
static int snap_read_header(cls_method_context_t hctx, bufferlist& bl)
{
return -EINVAL;
}
+ // protect against excessive memory requirements
+ if (object_count > RBD_MAX_OBJECT_MAP_OBJECT_COUNT) {
+ CLS_ERR("object map too large: %" PRIu64, object_count);
+ return -EINVAL;
+ }
+
BitVector<2> object_map;
int r = object_map_read(hctx, object_map);
if ((r < 0) && (r != -ENOENT)) {