mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Thomas Huth <thuth@redhat.com>
To: Eric Biggers <ebiggers@kernel.org>, linux-crypto@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Ard Biesheuvel <ardb@kernel.org>,
	"Jason A . Donenfeld" <Jason@zx2c4.com>,
	Herbert Xu <herbert@gondor.apana.org.au>
Subject: Re: [PATCH v2 06/13] lib/crypto: aes: Add GCM support
Date: Wed, 22 Jul 2026 13:02:46 +0200	[thread overview]
Message-ID: <ccaed4f3-a631-4d67-92ac-de9f1937e65c@redhat.com> (raw)
In-Reply-To: <20260715221153.246410-7-ebiggers@kernel.org>

On 16/07/2026 00.11, Eric Biggers wrote:
> Add support for AES-GCM to the crypto library.
> 
> This will be used to provide streamlined implementations of the
> "gcm(aes)" and "rfc4106(gcm(aes))" crypto_aead algorithms.  Most users
> of these will also be able to switch to the library, which as usual will
> be faster and simpler, e.g.:
> 
>    - drivers/net/macsec.c
>    - fs/smb/client/
>    - fs/smb/server/
>    - net/ceph/messenger_v2.c
>    - net/mac80211/ (for both GMAC and GCMP)
>    - net/tipc/crypto.c
>    - security/keys/trusted-keys/trusted_dcp.c
> 
> (I've already written proof-of-concept patches for all the above, and
> they helped inform the API design.)
> 
> As usual, the architecture-optimized AES-GCM code will be migrated into
> the library as well (using the hooks provided in this commit as well as
> the GHASH ones), eliminating lots of repetitive boilerplate code.
> 
> Incremental en/decryption is supported.  Incremental operation is a bit
> controversial in AEAD APIs because users have to be careful not to
> consume any decrypted data that hasn't been authenticated yet.  But I do
> think it's the right choice here.  It's not fundamentally different from
> the existing incremental MAC APIs, and it's the only approach that's
> general enough to work well for all users in the kernel:
> 
>    - An array of virtually-addressed buffers (like that used by
>      BoringSSL's EVP_AEAD_CTX_sealv() and EVP_AEAD_CTX_openv()) doesn't
>      work in the kernel in general, since in some cases the data for a
>      single AES-GCM message is contained in a large number of highmem
>      pages that each need to be mapped into memory individually.  That
>      can be done efficiently only by using CPU-local mappings, but there
>      is a limited number of those.
> 
>      Ceph messenger v2 is a great example, as it can send or receive up
>      to 32 MiB in a single AES-GCM message.  And it needs the
>      en/decrypted data to go into a (potentially large) number of bvecs
>      provided by a custom iterator, as well as into four
>      virtually-addressed buffers, two of which can be large buffers in
>      the vmalloc region.
> 
>      Even just allocating an array big enough to store all the pointers
>      can be problematic in the kernel.  There are cases in which
>      decryption runs in GFP_NOIO context or even in softirq context,
>      where memory allocations are not as reliable as they normally are.
> 
>    - Meanwhile, 'struct scatterlist' (the choice of crypto_aead) has
>      turned out to be really inconvenient for anyone who *does* just have
>      virtually-addressed buffers.  This is especially true if they can be
>      in the vmalloc region, including the stack, as in that case the
>      conversion to a scatterlist has to be done page-by-page.
> 
>      And even for users who have all of their data in bare 'struct page',
>      none of them actually use 'struct scatterlist' as their native data
>      structure anyway.  They actually use skbs, bvecs, or other formats.
> 
>    - iov_iter is attractive, but ultimately not general enough either
>      (considering the Ceph case for example), but also too general in
>      some ways (like having support for userspace addresses).  Additional
>      iter types like ITER_SKB would help a bit, but bloating iov_iter
>      with more types would reduce performance elsewhere in the kernel.
> 
> Initial test coverage is provided by the crypto_aead support added in a
> later commit.  I'm planning a KUnit test suite as well.
Sorry for asking ignorant questions, but which later commit is this? I 
couldn't spot it :-/

Anyway, the previous AES-GCM code in lib/crypto/aesgcm.c featured some 
self-tests in libaesgcm_init() ... would it maybe make sense to add those 
here, too?

  Thomas


  reply	other threads:[~2026-07-22 11:02 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-15 22:11 [PATCH v2 00/13] Library APIs for AES encryption modes Eric Biggers
2026-07-15 22:11 ` [PATCH v2 01/13] crypto: xts - Split out __xts_verify_key() helper Eric Biggers
2026-07-15 22:11 ` [PATCH v2 02/13] lib/crypto: aes: Add ECB support Eric Biggers
2026-07-15 22:11 ` [PATCH v2 03/13] lib/crypto: aes: Add CBC and CBC-CTS support Eric Biggers
2026-07-15 22:11 ` [PATCH v2 04/13] lib/crypto: aes: Add CTR and XCTR support Eric Biggers
2026-07-16  7:40   ` Thomas Huth
2026-07-15 22:11 ` [PATCH v2 05/13] lib/crypto: aes: Add XTS support Eric Biggers
2026-07-15 22:11 ` [PATCH v2 06/13] lib/crypto: aes: Add GCM support Eric Biggers
2026-07-22 11:02   ` Thomas Huth [this message]
2026-07-22 15:06     ` Eric Biggers
2026-07-15 22:11 ` [PATCH v2 07/13] lib/crypto: aes: Add CCM support Eric Biggers
2026-07-15 22:11 ` [PATCH v2 08/13] crypto: aes - Add ECB support using library Eric Biggers
2026-07-15 22:11 ` [PATCH v2 09/13] crypto: aes - Add CBC and CBC-CTS " Eric Biggers
2026-07-15 22:11 ` [PATCH v2 10/13] crypto: aes - Add CTR and XCTR " Eric Biggers
2026-07-15 22:11 ` [PATCH v2 11/13] crypto: aes - Add XTS " Eric Biggers
2026-07-15 22:11 ` [PATCH v2 12/13] crypto: aes - Add GCM " Eric Biggers
2026-07-15 22:11 ` [PATCH v2 13/13] crypto: aes - Add CCM " Eric Biggers
2026-07-20 18:01 ` [PATCH v2 00/13] Library APIs for AES encryption modes Eric Biggers

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=ccaed4f3-a631-4d67-92ac-de9f1937e65c@redhat.com \
    --to=thuth@redhat.com \
    --cc=Jason@zx2c4.com \
    --cc=ardb@kernel.org \
    --cc=ebiggers@kernel.org \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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

all inboxes | Powered by JetHome®