Skip to content

nvme: implement secure concatenation

Hannes Reinecke linux-nvme 17 versions – Applied

Status from this message: Queued up in nvme-6.15, thanks.

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v15 Latest10 patches 3 repliesApplied
  2. v1410 patches 16 repliesSuperseded
  3. v1310 patches 11 repliesSuperseded
Earlier versions · 14
VersionPostedPatchesRepliesStatus
v1210 patches3 repliesSuperseded
v119 patches8 repliesSuperseded
v109 patches7 repliesSuperseded
v99 patches15 repliesSuperseded
v8 posting 2/29 patches11 repliesSuperseded
v8 posting 1/29 patches13 repliesSuperseded
v79 patches5 repliesSuperseded
v6 posting 2/28 patches5 repliesSuperseded
v6 posting 1/28 patches8 repliesSuperseded
v516 patches20 repliesSuperseded
v419 patches0 repliesSuperseded
v317 patches35 repliesSuperseded
v213 patches15 repliesSuperseded
v1 RFC11 patches0 repliesSuperseded

Changes to v14 from the cover letter

- Include reviews from hch
- Split off prep patch adding 'sq' argument to alloc_ctrl_args

Patches in v15 Applied

#Subject and filesSizeRepliesApplied
1/10crypto,fs: Separate out hkdf_extract() and hkdf_expand()crypto/Kconfig crypto/Makefile crypto/hkdf.c +3 more+616 -700 replies
2/10nvme: add nvme_auth_generate_psk()drivers/nvme/common/auth.c include/linux/nvme-auth.h+90 -00 replies
3/10nvme: add nvme_auth_generate_digest()drivers/nvme/common/auth.c include/linux/nvme-auth.h+136 -00 replies
4/10nvme: add nvme_auth_derive_tls_psk()drivers/nvme/common/Kconfig drivers/nvme/common/auth.c include/linux/nvme-auth.h+119 -00 replies
5/10nvme-keyring: add nvme_tls_psk_refresh()drivers/nvme/common/keyring.c drivers/nvme/host/tcp.c drivers/nvme/target/tcp.c +1 more+75 -40 replies
6/10nvme-tcp: request secure channel concatenationdrivers/nvme/host/Kconfig drivers/nvme/host/auth.c drivers/nvme/host/fabrics.c +5 more+205 -150 replies
7/10nvme-fabrics: reset admin connection for secure concatenationdrivers/nvme/host/tcp.c+10 -00 replies
8/10nvmet: Add 'sq' argument to alloc_ctrl_argsdrivers/nvme/target/auth.c drivers/nvme/target/core.c drivers/nvme/target/fabrics-cmd-auth.c +2 more+14 -92 replies
9/10nvmet-tcp: support secure channel concatenationdrivers/nvme/target/auth.c drivers/nvme/target/core.c drivers/nvme/target/fabrics-cmd-auth.c +3 more+199 -130 replies
10/10nvmet: add tls_concat and tls_key debugfs entriesdrivers/nvme/target/debugfs.c+27 -00 replies

Reviews trailers per patch

All 10 patches have a Reviewed-by or Acked-by.

PatchEric BiggersHerbert XuSagi GrimbergDamien Le Moal
1/10A-b A-b
2/10R-b
3/10R-b
4/10R-b
5/10R-b
6/10R-b
7/10R-b
8/10R-b R-b
9/10R-b
10/10R-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 4 reviewers.

Read the v15 thread

Cover letter [PATCHv15 00/10] nvme: implement secure concatenation

From: Hannes Reinecke <[email protected]>

Hi all,

here's my attempt to implement secure concatenation for NVMe-of TCP as outlined in TP8018 / NVMe Base Spec v2.1.
The original (v5) patchset had been split in two, the first part of which has already been merged with nvme-6.11, and this is the second part which actually implements secure concatenation.

Secure concatenation means that a TLS PSK is generated from the key material negotiated by the DH-HMAC-CHAP protocol, and the TLS PSK is then used for a subsequent TLS connection.
With NVMe v2.1 the connection has to be reset after DH-HMAC-CHAP negotiation, and the new connection can then be started with TLS encryption using the generated TLS PSK.

To implement that Sagi came up with the idea to directly reset the admin queue once the DH-CHAP negotiation has completed; that way it will be transparent to the upper layers and we don't have to worry about exposing queues which should not be used.

A blktest submission is in
https://github.com/osandov/blktests/pull/158
in case anyone want to run their own tests.

As usual, comments and reviews are welcome.

Patchset can be found at git.kernel.org:/pub/scm/linux/kernel/git/hare/nvme.git branch secure-concat.v15

Changes to v14:
- Include reviews from hch
- Split off prep patch adding 'sq' argument to alloc_ctrl_args

Changes to v13:
- Fixup yet another kbuild robot failure
- Rework to apply on nvme-6.14

Changes to v12:
- Fixup kbuild robot failures
- Add missing return value

Changes to v11:
- Include reviews from Sagi

Changes to v10:
- Include reviews from Eric Biggers
- Drop test vectors for SHA1
- Add test vectors for SHA384 and SHA512
- Include reviews from Mark O'Donovan

Changes to v9:
- Include reviews from Eric Biggers
- Fixup secure concatenation after reset
- Rebased to nvme-6.12

Changes to v8:
- Include reviews from Eric Biggers
- Make hkdf a proper module
- Add testcases for hkdf

Changes to v7:
- Add patch to display nvme target TLS status in debugfs
- Include reviews from Sagi

Changes to v6:
- Rebase to nvme-6.11

Changes to v5:
- Include reviews from Sagi
- Split patchset in two parts

Changes to v4:
- Rework reset admin queue functionality based on an idea from Sagi (thanks!)
- kbuild robot fixes
- Fixup dhchap negotiation with non-empty C2 value

Changes to v3:
- Include reviews from Sagi
- Do not start I/O queues after DH-HMAC-CHAP negotiation
- Use bool to indicate TLS has been enabled on a queue
- Add 'tls_keyring' sysfs attribute
- Add 'tls_configured_key' sysfs attribute

Changes to v2:
- Fixup reset after dhchap negotiation
- Disable namespace scanning on I/O queues after
dhchap negotiation
- Reworked TLS key handling (again)

Changes to the original submission:
- Sanitize TLS key handling
- Fixup modconfig compilation

Hannes Reinecke (10):
crypto,fs: Separate out hkdf_extract() and hkdf_expand()
nvme: add nvme_auth_generate_psk()
nvme: add nvme_auth_generate_digest()
nvme: add nvme_auth_derive_tls_psk()
nvme-keyring: add nvme_tls_psk_refresh()
nvme-tcp: request secure channel concatenation
nvme-fabrics: reset admin connection for secure concatenation
nvmet: Add 'sq' argument to alloc_ctrl_args
nvmet-tcp: support secure channel concatenation
nvmet: add tls_concat and tls_key debugfs entries

 crypto/Kconfig                         |   6 +
 crypto/Makefile                        |   1 +
 crypto/hkdf.c                          | 573 +++++++++++++++++++++++++
 drivers/nvme/common/Kconfig            |   1 +
 drivers/nvme/common/auth.c             | 337 +++++++++++++++
 drivers/nvme/common/keyring.c          |  65 ++-
 drivers/nvme/host/Kconfig              |   2 +-
 drivers/nvme/host/auth.c               | 115 ++++-
 drivers/nvme/host/fabrics.c            |  34 +-
 drivers/nvme/host/fabrics.h            |   3 +
 drivers/nvme/host/nvme.h               |   2 +
 drivers/nvme/host/sysfs.c              |   4 +-
 drivers/nvme/host/tcp.c                |  64 ++-
 drivers/nvme/target/auth.c             |  72 +++-
 drivers/nvme/target/core.c             |   7 +-
 drivers/nvme/target/debugfs.c          |  27 ++
 drivers/nvme/target/fabrics-cmd-auth.c |  60 ++-
 drivers/nvme/target/fabrics-cmd.c      |  25 +-
 drivers/nvme/target/nvmet.h            |  38 +-
 drivers/nvme/target/tcp.c              |  32 +-
 fs/crypto/Kconfig                      |   1 +
 fs/crypto/hkdf.c                       |  85 +---
 include/crypto/hkdf.h                  |  20 +
 include/linux/nvme-auth.h              |   7 +
 include/linux/nvme-keyring.h           |  12 +-
 include/linux/nvme.h                   |   7 +
 26 files changed, 1490 insertions(+), 110 deletions(-)
 create mode 100644 crypto/hkdf.c
 create mode 100644 include/crypto/hkdf.h
Signature · 1 line
2.35.3