From e259971333382a76cdb65a6bf00172ab36423bf9 Mon Sep 17 00:00:00 2001
From: David Disseldorp <ddiss@suse.de>
Date: Thu, 28 Jan 2021 15:46:33 +0100
Subject: [PATCH] target: disallow emulate_legacy_capacity with RBD object-map
Patch-mainline: Not yet, SES clustered LIO/RBD
References: bsc#1177109 bsc#1181366
We permit image overrun for legacy (non object-map) images when
emulate_legacy_capacity is enabled. Image overrun mustn't be
permitted alongside RBD_FEATURE_OBJECT_MAP.
Signed-off-by: David Disseldorp <ddiss@suse.de>
Reviewed-by: Lee Duncan <lduncan@suse.com>
---
drivers/target/target_core_rbd.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/target/target_core_rbd.c b/drivers/target/target_core_rbd.c
index 1a0efe1254f6..e710dd4a1cca 100644
--- a/drivers/target/target_core_rbd.c
+++ b/drivers/target/target_core_rbd.c
@@ -132,6 +132,19 @@ static int tcm_rbd_configure_device(struct se_device *dev)
/* blkdev_put() called in destroy_device */
return -EINVAL;
}
+ if (tcm_rbd_dev->emulate_legacy_capacity
+ /* (1ULL<<3) = RBD_FEATURE_OBJECT_MAP */
+ && tcm_rbd_dev->rbd_dev->header.features & (1ULL<<3)) {
+ /*
+ * bsc#1177109 and bsc#1181366: we permit image overrun for
+ * legacy (non object-map) images when emulate_legacy_capacity
+ * is enabled. Image overrun musn't be permitted alongside
+ * RBD_FEATURE_OBJECT_MAP.
+ */
+ pr_err("RBD: emulate_legacy_capacity must be disabled for "
+ "RBD_FEATURE_OBJECT_MAP images\n");
+ return -EINVAL;
+ }
/* disable standalone reservation handling */
dev->dev_attrib.emulate_pr = 0;
--
2.26.2