nvmet: Set 'TREQ' to 'required' when TLS is enabled
authorHannes Reinecke <hare@suse.de>
Thu, 24 Aug 2023 14:39:22 +0000 (16:39 +0200)
committerKeith Busch <kbusch@kernel.org>
Wed, 11 Oct 2023 17:29:59 +0000 (10:29 -0700)
The current implementation does not support secure concatenation,
so 'TREQ' is always set to 'required' when TLS is enabled.

Signed-off-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Signed-off-by: Keith Busch <kbusch@kernel.org>
drivers/nvme/target/configfs.c
drivers/nvme/target/nvmet.h

index 27a0f9c768e80fcc82acbf257c7d1c4b0d67aa91..483569c3f622f2ee27e1225bde2c08989ada180d 100644 (file)
@@ -166,8 +166,7 @@ static inline u8 nvmet_port_disc_addr_treq_mask(struct nvmet_port *port)
 
 static ssize_t nvmet_addr_treq_show(struct config_item *item, char *page)
 {
-       u8 treq = to_nvmet_port(item)->disc_addr.treq &
-               NVME_TREQ_SECURE_CHANNEL_MASK;
+       u8 treq = nvmet_port_disc_addr_treq_secure_channel(to_nvmet_port(item));
        int i;
 
        for (i = 0; i < ARRAY_SIZE(nvmet_addr_treq); i++) {
@@ -376,6 +375,7 @@ static ssize_t nvmet_addr_tsas_store(struct config_item *item,
                const char *page, size_t count)
 {
        struct nvmet_port *port = to_nvmet_port(item);
+       u8 treq = nvmet_port_disc_addr_treq_mask(port);
        u8 sectype;
        int i;
 
@@ -397,6 +397,17 @@ static ssize_t nvmet_addr_tsas_store(struct config_item *item,
 
 found:
        nvmet_port_init_tsas_tcp(port, sectype);
+       /*
+        * The TLS implementation currently does not support
+        * secure concatenation, so TREQ is always set to 'required'
+        * if TLS is enabled.
+        */
+       if (sectype == NVMF_TCP_SECTYPE_TLS13) {
+               treq |= NVMF_TREQ_REQUIRED;
+       } else {
+               treq |= NVMF_TREQ_NOT_SPECIFIED;
+       }
+       port->disc_addr.treq = treq;
        return count;
 }
 
index 8cfd60f3b5648f12986a7607cc50630c08841fe7..87da62e4b74343d562513629680d60e9537c4e63 100644 (file)
@@ -178,6 +178,11 @@ static inline struct nvmet_port *ana_groups_to_port(
                        ana_groups_group);
 }
 
+static inline u8 nvmet_port_disc_addr_treq_secure_channel(struct nvmet_port *port)
+{
+       return (port->disc_addr.treq & NVME_TREQ_SECURE_CHANNEL_MASK);
+}
+
 struct nvmet_ctrl {
        struct nvmet_subsys     *subsys;
        struct nvmet_sq         **sqs;