Skip to content

nvme: In-band authentication support

Hannes Reinecke linux-nvme 18 versions – Applied

Status from this message: applied to the nvme-5.20 branch.

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v18 Latest11 patches 8 repliesApplied
  2. v1711 patches 5 repliesSuperseded
  3. v1611 patches 7 repliesSuperseded
Earlier versions · 15
VersionPostedPatchesRepliesStatus
v1511 patches13 repliesSuperseded
v1411 patches15 repliesSuperseded
v139 patches5 repliesSuperseded
v1211 patches14 repliesSuperseded
v1111 patches2 repliesSuperseded
v1011 patches0 repliesSuperseded
v911 patches3 repliesSuperseded
v812 patches17 repliesSuperseded
v712 patches4 repliesSuperseded
v612 patches21 repliesSuperseded
v512 patches20 repliesSuperseded
v412 patches8 repliesSuperseded
v312 patches32 repliesSuperseded
v213 patches6 repliesSuperseded
v1 RFC11 patches63 repliesSuperseded

Changes to v17 from the cover letter

- Return error on authentication failure
(reported by Sagi)

Patches in v18 Applied

#Subject and filesSizeRepliesApplied
1/11crypto: add crypto_has_shash()crypto/shash.c include/crypto/hash.h+8 -00 replies
2/11crypto: add crypto_has_kpp()crypto/kpp.c include/crypto/kpp.h+8 -00 replies
3/11lib/base64: RFC4648-compliant base64 encodinginclude/linux/base64.h lib/Makefile lib/base64.c+120 -10 replies
4/11nvme: add definitions for NVMe In-Band authenticationinclude/linux/nvme.h+208 -11 reply
5/11nvme-fabrics: decode 'authentication required' connect errordrivers/nvme/host/fabrics.c+4 -00 replies
6/11nvme: Implement In-Band authenticationdrivers/nvme/Kconfig drivers/nvme/Makefile drivers/nvme/common/Kconfig +13 more+1504 -70 replies
7/11nvme-auth: Diffie-Hellman key exchange supportdrivers/nvme/common/auth.c drivers/nvme/host/Kconfig drivers/nvme/host/auth.c +1 more+358 -60 replies
8/11nvmet: parse fabrics commands on io queuesdrivers/nvme/target/admin-cmd.c drivers/nvme/target/core.c drivers/nvme/target/fabrics-cmd.c +1 more+23 -30 replies
9/11nvmet: Implement basic In-Band Authenticationdrivers/nvme/target/Kconfig drivers/nvme/target/Makefile drivers/nvme/target/admin-cmd.c +6 more+1100 -30 replies
10/11nvmet-auth: Diffie-Hellman key exchange supportdrivers/nvme/target/Kconfig drivers/nvme/target/auth.c drivers/nvme/target/configfs.c +2 more+232 -81 reply
11/11nvmet-auth: expire authentication sessionsdrivers/nvme/target/auth.c drivers/nvme/target/fabrics-cmd-auth.c drivers/nvme/target/nvmet.h+21 -10 replies

Reviews trailers per patch

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

PatchSagi GrimbergChaitanya KulkarniHimanshu MadhaniHerbert Xu
SeriesT-b
1/11R-b R-b R-b A-b
2/11R-b R-b R-b A-b
3/11R-b R-b
4/11R-b R-b R-b
5/11R-b R-b R-b
6/11R-b
7/11R-b
8/11R-b
9/11R-b
10/11R-b
11/11R-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 v18 thread

Cover letter [PATCHv18 00/11] nvme: In-band authentication support

Hi all,

recent updates to the NVMe spec have added definitions for in-band authentication, and seeing that it provides some real benefit especially for NVMe-TCP here's an attempt to implement it.

Thanks to Nicolai Stange the crypto DH framework has been upgraded to provide us with a FFDHE implementation; I've updated the patchset to use the ephemeral key generation provided there.

Note that this is just for in-band authentication. Secure concatenation (ie starting TLS with the negotiated parameters) requires a TLS handshake, which the in-kernel TLS implementation does not provide. This is being worked on with a different patchset which is still WIP.

The nvme-cli support has already been merged; please use the latest nvme-cli git repository to build the most recent version.

A copy of this patchset can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/hare/scsi-devel
branch auth.v17

The patchset is being cut against nvme-5.20.

As usual, comments and reviews are welcome.

Changes to v17:
- Return error on authentication failure
(reported by Sagi)

Changes to v16:
- Fixup memory leaks
- Fix crash on invalid controller secret
- Abort connect command on invalid controller secret

Changes to v15:
- Rebase to nvme-5.20

Changes to v14:
- Rebase to nvme-5.19
- Fixup sparse warnings as noted by Christoph
- Fixup Kconfig dependencies
- Add NVME_CONNECT_AUTHREQ definitions

Changes to v13:
- Fixup sysfs attribute visibility (reported by Chaitanya)
- Fixup SUCCESS1 handling
- Re-introduce crypto_has_shash() and crypto_has_kpp() helper
- Unse 'authenticated' flag on failure

Changes to v12:
- Replaces crypto_has_shash() and crypto_has_kpp() helper with CONFIG_ checks
- Fixed kbuild robot warning in pr_fmt()

Changes to v11:
- Fixup type for FAILURE2 message (Prashant Nayak)
- Do not sent SUCCESS2 if bi-directional authentication is not requested (Martin George)

Changes to v10:
- Fixup error return value when authentication failed

Changes to v9:
- Include review from Chaitanya
- Use sparse array for dhgroup and hash lookup
- Common function for auth_send and auth_receive

Changes to v8:
- Rebased to Nicolais crypto DH rework
- Fixed oops on non-fabrics devices

Changes to v7:
- Space out hash list and dhgroup list in nvme negotiate data to be conformant with the spec
- Update sequence number handling to start with a random value and ignore '0' as mandated by the spec
- Update nvme_auth_generate_key to return the key as suggested by Sagi
- Add nvmet_parse_fabrics_io_cmd() as suggested by hch

Changes to v6:
- Use 'u8' for DH group id and hash id
- Use 'struct nvme_dhchap_key'
- Rename variables to drop 'DHCHAP'
- Include reviews from Chaitanya

Changes to v5:
- Unify nvme_auth_generate_key()
- Unify nvme_auth_extract_key()
- Fixed bug where re-authentication with wrong controller key would not fail
- Include reviews from Sagi

Changes to v4:
- Validate against blktest suite
- Fixup base64 decoding
- Transform secret with correct hmac algorithm

Changes to v3:
- Renamed parameter to 'dhchap_ctrl_key'
- Fixed bi-directional authentication
- Included reviews from Sagi
- Fixed base64 algorithm for transport encoding

Changes to v2:
- Dropped non-standard algorithms
- Reworked base64 based on fs/crypto/fname.c
- Fixup crash with no keys

Changes to the original submission:
- Included reviews from Vladislav
- Included reviews from Sagi
- Implemented re-authentication support
- Fixed up key handling

Hannes Reinecke (11):
crypto: add crypto_has_shash()
crypto: add crypto_has_kpp()
lib/base64: RFC4648-compliant base64 encoding
nvme: add definitions for NVMe In-Band authentication
nvme-fabrics: decode 'authentication required' connect error
nvme: Implement In-Band authentication
nvme-auth: Diffie-Hellman key exchange support
nvmet: parse fabrics commands on io queues
nvmet: Implement basic In-Band Authentication
nvmet-auth: Diffie-Hellman key exchange support
nvmet-auth: expire authentication sessions

 crypto/kpp.c                           |    6 +
 crypto/shash.c                         |    6 +
 drivers/nvme/Kconfig                   |    1 +
 drivers/nvme/Makefile                  |    1 +
 drivers/nvme/common/Kconfig            |    4 +
 drivers/nvme/common/Makefile           |    7 +
 drivers/nvme/common/auth.c             |  482 +++++++++++
 drivers/nvme/host/Kconfig              |   15 +
 drivers/nvme/host/Makefile             |    1 +
 drivers/nvme/host/auth.c               | 1017 ++++++++++++++++++++++++
 drivers/nvme/host/core.c               |  143 +++-
 drivers/nvme/host/fabrics.c            |   84 +-
 drivers/nvme/host/fabrics.h            |    7 +
 drivers/nvme/host/nvme.h               |   30 +
 drivers/nvme/host/rdma.c               |    1 +
 drivers/nvme/host/tcp.c                |    1 +
 drivers/nvme/host/trace.c              |   32 +
 drivers/nvme/target/Kconfig            |   15 +
 drivers/nvme/target/Makefile           |    1 +
 drivers/nvme/target/admin-cmd.c        |    4 +-
 drivers/nvme/target/auth.c             |  525 ++++++++++++
 drivers/nvme/target/configfs.c         |  138 +++-
 drivers/nvme/target/core.c             |   15 +
 drivers/nvme/target/fabrics-cmd-auth.c |  545 +++++++++++++
 drivers/nvme/target/fabrics-cmd.c      |   55 +-
 drivers/nvme/target/nvmet.h            |   75 +-
 include/crypto/hash.h                  |    2 +
 include/crypto/kpp.h                   |    2 +
 include/linux/base64.h                 |   16 +
 include/linux/nvme-auth.h              |   41 +
 include/linux/nvme.h                   |  209 ++++-
 lib/Makefile                           |    2 +-
 lib/base64.c                           |  103 +++
 33 files changed, 3571 insertions(+), 15 deletions(-)
 create mode 100644 drivers/nvme/common/Kconfig
 create mode 100644 drivers/nvme/common/Makefile
 create mode 100644 drivers/nvme/common/auth.c
 create mode 100644 drivers/nvme/host/auth.c
 create mode 100644 drivers/nvme/target/auth.c
 create mode 100644 drivers/nvme/target/fabrics-cmd-auth.c
 create mode 100644 include/linux/base64.h
 create mode 100644 include/linux/nvme-auth.h
 create mode 100644 lib/base64.c
Signature · 1 line
2.29.2