From: Eric Biggers <ebiggers@kernel.org>
To: linux-cifs@vger.kernel.org, Steve French <sfrench@samba.org>
Cc: samba-technical@lists.samba.org, linux-crypto@vger.kernel.org,
linux-kernel@vger.kernel.org, Paulo Alcantara <pc@manguebit.org>,
Ronnie Sahlberg <ronniesahlberg@gmail.com>,
Shyam Prasad N <sprasad@microsoft.com>,
Tom Talpey <tom@talpey.com>, Bharath SM <bharathsm@microsoft.com>
Subject: Re: [PATCH 0/8] smb: client: More crypto library conversions
Date: Mon, 13 Oct 2025 20:42:30 -0700 [thread overview]
Message-ID: <20251014034230.GC2763@sol> (raw)
In-Reply-To: <20251012015738.244315-1-ebiggers@kernel.org>
On Sat, Oct 11, 2025 at 06:57:30PM -0700, Eric Biggers wrote:
> This series converts fs/smb/client/ to access SHA-512, HMAC-SHA256, MD5,
> and HMAC-MD5 using the library APIs instead of crypto_shash.
>
> This simplifies the code significantly. It also slightly improves
> performance, as it eliminates unnecessary overhead.
>
> Tested with Samba with all SMB versions, with mfsymlinks in the mount
> options, 'server min protocol = NT1' and 'server signing = required' in
> smb.conf, and doing a simple file data and symlink verification test.
> That seems to cover all the modified code paths.
>
> However, with SMB 1.0 I get "CIFS: VFS: SMB signature verification
> returned error = -13", regardless of whether this series is applied or
> not. Presumably, testing that case requires some other setting I
> couldn't find.
>
> Regardless, these are straightforward conversions and all the actual
> crypto is exactly the same as before, as far as I can tell.
>
> Eric Biggers (8):
> smb: client: Use SHA-512 library for SMB3.1.1 preauth hash
> smb: client: Use HMAC-SHA256 library for key generation
> smb: client: Use HMAC-SHA256 library for SMB2 signature calculation
> smb: client: Use MD5 library for M-F symlink hashing
> smb: client: Use MD5 library for SMB1 signature calculation
> smb: client: Use HMAC-MD5 library for NTLMv2
> smb: client: Remove obsolete crypto_shash allocations
> smb: client: Consolidate cmac(aes) shash allocation
As requested off-list, here are some (micro)benchmark results for this
series. The CPU was AMD Ryzen 9 9950X. The server was Samba running on
localhost. Message signing was enabled. A valid username and password
were given in the mount options. The "Improvement" column is the
percent change in throughput (reciprocal cycles):
Microbenchmark Before After Improvement
============== ====== ===== ===========
1. Total cycles spent in 44548 20081 122%
smb311_update_preauth_hash()
during SMB 3.1.1 mount
(4 calls total)
2. setup_ntlmv2_rsp() cycles 31777 22231 43%
3. Total cycles spent in 17802 22876 -22%
generate_key()
during SMB 3.1.1 mount
(3 calls total)
4. Total cycles spent in 205110 87204 135%
smb2_calc_signature()
during SMB 2.0 mount
(26 calls & 3316 bytes total)
5. Total cycles spent in 22689767 21043125 8%
smb2_calc_signature()
reading 10MB file using SMB 2.0
(316 calls & 10031077 bytes total)
6. Total cycles spent in 56803 37840 50%
cifs_calc_signature()
during SMB 1.0 mount
(18 calls & 1551 bytes total)
7. Total cycles spent in 52669066 51974573 1%
cifs_calc_signature()
reading 10MB file using SMB 1.0
(336 calls & 10021426 bytes total)
8. parse_mf_symlink() cycles 7654 4902 56%
Note: case 3 regressed because the "cmac(aes)" allocation moved from
smb311_update_preauth_hash (case 1) to generate_key (case 3). Excluding
that allocation, generate_key got faster. Likewise, the sum of cases 1,
2, and 3 (which all occurred at mount time) got faster.
There was a greater speedup in signature calculation than I expected.
It's probably because many SMB messages are short (especially the ones
exchanged at mount time), and also because the old code allocated new
crypto_shash objects more frequently than I had thought. The SMB 2.0
code allocated a new "hmac(sha256)" crypto_shash for every other message
signed. That overhead is all gone after switching to the library.
TLDR: all SMB crypto calculations (SHA-512, HMAC-SHA256, MD5, HMAC-MD5)
affected by this series are faster now. The library APIs fix the
unnecessary overhead that the traditional crypto API has. Of course,
it's also a lot easier to use as well.
- Eric
next prev parent reply other threads:[~2025-10-14 3:44 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-12 1:57 [PATCH 0/8] smb: client: More crypto library conversions Eric Biggers
2025-10-12 1:57 ` [PATCH 1/8] smb: client: Use SHA-512 library for SMB3.1.1 preauth hash Eric Biggers
2025-10-12 1:57 ` [PATCH 2/8] smb: client: Use HMAC-SHA256 library for key generation Eric Biggers
2025-10-12 1:57 ` [PATCH 3/8] smb: client: Use HMAC-SHA256 library for SMB2 signature calculation Eric Biggers
2025-10-12 1:57 ` [PATCH 4/8] smb: client: Use MD5 library for M-F symlink hashing Eric Biggers
2025-10-12 1:57 ` [PATCH 5/8] smb: client: Use MD5 library for SMB1 signature calculation Eric Biggers
2025-10-12 1:57 ` [PATCH 6/8] smb: client: Use HMAC-MD5 library for NTLMv2 Eric Biggers
2025-10-12 1:57 ` [PATCH 7/8] smb: client: Remove obsolete crypto_shash allocations Eric Biggers
2025-10-12 1:57 ` [PATCH 8/8] smb: client: Consolidate cmac(aes) shash allocation Eric Biggers
2025-10-13 14:44 ` [PATCH 0/8] smb: client: More crypto library conversions Enzo Matsumiya
2025-10-14 6:07 ` Eric Biggers
2025-10-14 3:42 ` Eric Biggers [this message]
2025-10-17 16:12 ` Steve French
2025-10-17 16:24 ` Eric Biggers
2025-10-14 7:55 ` Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251014034230.GC2763@sol \
--to=ebiggers@kernel.org \
--cc=bharathsm@microsoft.com \
--cc=linux-cifs@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pc@manguebit.org \
--cc=ronniesahlberg@gmail.com \
--cc=samba-technical@lists.samba.org \
--cc=sfrench@samba.org \
--cc=sprasad@microsoft.com \
--cc=tom@talpey.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).