nvme: In-band authentication support
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
- v18 Latest11 patches 8 repliesApplied
- v1711 patches 5 repliesSuperseded
- v1611 patches 7 repliesSuperseded
Earlier versions · 15
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v15 | 11 patches | 13 replies | Superseded | |
| v14 | 11 patches | 15 replies | Superseded | |
| v13 | 9 patches | 5 replies | Superseded | |
| v12 | 11 patches | 14 replies | Superseded | |
| v11 | 11 patches | 2 replies | Superseded | |
| v10 | 11 patches | 0 replies | Superseded | |
| v9 | 11 patches | 3 replies | Superseded | |
| v8 | 12 patches | 17 replies | Superseded | |
| v7 | 12 patches | 4 replies | Superseded | |
| v6 | 12 patches | 21 replies | Superseded | |
| v5 | 12 patches | 20 replies | Superseded | |
| v4 | 12 patches | 8 replies | Superseded | |
| v3 | 12 patches | 32 replies | Superseded | |
| v2 | 13 patches | 6 replies | Superseded | |
| v1 RFC | 11 patches | 63 replies | Superseded |
Changes to v17 from the cover letter
- Return error on authentication failure
(reported by Sagi)
Patches in v18 Applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/11 | crypto: add crypto_has_shash()crypto/ include/ | +8 | 0 replies | |
| 2/11 | crypto: add crypto_has_kpp()crypto/ include/ | +8 | 0 replies | |
| 3/11 | lib/base64: RFC4648-compliant base64 encodinginclude/ lib/ lib/ | +120 | 0 replies | |
| 4/11 | nvme: add definitions for NVMe In-Band authenticationinclude/ | +208 | 1 reply | |
| 5/11 | nvme-fabrics: decode 'authentication required' connect errordrivers/ | +4 | 0 replies | |
| 6/11 | nvme: Implement In-Band authenticationdrivers/ drivers/ drivers/ +13 more | +1504 | 0 replies | |
| 7/11 | nvme-auth: Diffie-Hellman key exchange supportdrivers/ drivers/ drivers/ +1 more | +358 | 0 replies | |
| 8/11 | nvmet: parse fabrics commands on io queuesdrivers/ drivers/ drivers/ +1 more | +23 | 0 replies | |
| 9/11 | nvmet: Implement basic In-Band Authenticationdrivers/ drivers/ drivers/ +6 more | +1100 | 0 replies | |
| 10/11 | nvmet-auth: Diffie-Hellman key exchange supportdrivers/ drivers/ drivers/ +2 more | +232 | 1 reply | |
| 11/11 | nvmet-auth: expire authentication sessionsdrivers/ drivers/ drivers/ | +21 | 0 replies |
Reviews trailers per patch
All 11 patches have a Reviewed-by or Acked-by.
| Patch | Sagi Grimberg | Chaitanya Kulkarni | Himanshu Madhani | Herbert Xu |
|---|---|---|---|---|
| Series | T-b | |||
| 1/11 | R-b | R-b | R-b | A-b |
| 2/11 | R-b | R-b | R-b | A-b |
| 3/11 | R-b | R-b | ||
| 4/11 | R-b | R-b | R-b | |
| 5/11 | R-b | R-b | R-b | |
| 6/11 | R-b | |||
| 7/11 | R-b | |||
| 8/11 | R-b | |||
| 9/11 | R-b | |||
| 10/11 | R-b | |||
| 11/11 | R-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.
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 atgit://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