Blob Blame History Raw
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