[PATCH 18/18] nvmet-tcp: add configfs attribute 'param_keyring'

Hannes Reinecke
2023-04-17T13:03:11Z

Add a configfs attribute to list and change the default keyring.

Signed-off-by: Hannes Reinecke <hare@suse.de>
---
drivers/nvme/target/configfs.c | 45 ++++++++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)

diff --git a/drivers/nvme/target/configfs.c b/drivers/nvme/target/configfs.c
index 49b407702ad5..493f5524c922 100644
--- a/drivers/nvme/target/configfs.c
+++ b/drivers/nvme/target/configfs.c
@@ -309,6 +309,47 @@ static ssize_t nvmet_param_pi_enable_store(struct config_item *item,
CONFIGFS_ATTR(nvmet_, param_pi_enable);
#endif

+#ifdef CONFIG_NVME_TARGET_TCP_TLS
+static ssize_t nvmet_param_keyring_show(struct config_item *item,
+ char *page)
+{
+ struct nvmet_port *port = to_nvmet_port(item);
+
+ if (!port->keyring)
+ return sprintf(page, "\n");
+ return snprintf(page, PAGE_SIZE, "%s\n",
+ port->keyring->description);
+}
+
+static ssize_t nvmet_param_keyring_store(struct config_item *item,
+ const char *page, size_t count)
+{
+ struct nvmet_port *port = to_nvmet_port(item);
+ struct key *keyring;
+ unsigned int keyring_id;
+ int ret;
+
+ if (nvmet_is_port_enabled(port, __func__))
+ return -EACCES;
+
+ ret = kstrtou32(page, 0, &keyring_id);
+ if (ret) {
+ pr_err("Invalid keyring id '%s'\n", page);
+ return ret;
+ }
+ keyring = key_lookup(keyring_id);
+ if (IS_ERR(keyring)) {
+ pr_err("Invalid keyring '%08x'\n", keyring_id);
+ return PTR_ERR(keyring);
+ }
+ key_put(port->keyring);
+ port->keyring = keyring;
+ return count;
+}
+
+CONFIGFS_ATTR(nvmet_, param_keyring);
+#endif
+
static ssize_t nvmet_addr_trtype_show(struct config_item *item,
char *page)
{
@@ -412,6 +453,7 @@ static ssize_t nvmet_addr_tsas_store(struct config_item *item,
pr_err("TLS is not supported\n");
return -EINVAL;
}
+
if (!port->keyring) {
pr_err("TLS keyring not configured\n");
return -EINVAL;
@@ -1858,6 +1900,9 @@ static struct configfs_attribute *nvmet_port_attrs[] = {
&nvmet_attr_param_inline_data_size,
#ifdef CONFIG_BLK_DEV_INTEGRITY
&nvmet_attr_param_pi_enable,
+#endif
+#ifdef CONFIG_NVME_TARGET_TCP_TLS
+ &nvmet_attr_param_keyring,
#endif
NULL,
};
--
2.35.3