From: Eric Biggers <ebiggers@kernel.org>
To: linux-fscrypt@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-f2fs-devel@lists.sourceforge.net, stable@vger.kernel.org
Subject: Re: [PATCH] fscrypt: Avoid dynamic allocation in fscrypt_get_devices()
Date: Mon, 20 Jul 2026 10:45:58 -0700 [thread overview]
Message-ID: <20260720174558.GC1865@quark> (raw)
In-Reply-To: <20260719055602.78828-1-ebiggers@kernel.org>
On Sat, Jul 18, 2026 at 10:56:02PM -0700, Eric Biggers wrote:
> When a blk_crypto_key starts being used or is evicted, fs/crypto/ calls
> fscrypt_get_devices() to get the filesystem's list of block devices,
> then iterates over them and calls blk_crypto_config_supported(),
> blk_crypto_start_using_key(), or blk_crypto_evict_key() on each one.
>
> Currently, the block device pointers are placed in a dynamically
> allocated array. This dynamic allocation is problematic because:
>
> - It can fail, especially at the fscrypt_destroy_inline_crypt_key() call
> site when it's invoked for inode eviction under direct reclaim.
>
> - fscrypt_destroy_inline_crypt_key() doesn't handle the failure. It
> just zeroizes and frees the blk_crypto_key without calling
> blk_crypto_evict_key(). That causes a use-after-free.
>
> For now, let's fix this in the straightforward and easily-backportable
> way by switching to an on-stack array. Currently the fscrypt
> multi-device functionality is used only by f2fs, which has a hardcoded
> limit of 8 block devices. An on-stack array works fine for that.
>
> (Of course, this solution won't scale up to large number of block
> devices. For that we'd need a different solution, like moving the block
> device iteration into the filesystem. Or in the case of btrfs, which
> will only support blk-crypto-fallback, we should make it just call
> blk-crypto-fallback directly, so the block devices won't be needed.)
>
> Fixes: 22e9947a4b2b ("fscrypt: stop holding extra request_queue references")
> Cc: stable@vger.kernel.org
> Signed-off-by: Eric Biggers <ebiggers@kernel.org>
> ---
Applied to https://git.kernel.org/pub/scm/fs/fscrypt/linux.git/log/?h=for-current
- Eric
WARNING: multiple messages have this Message-ID (diff)
From: Eric Biggers via Linux-f2fs-devel <linux-f2fs-devel@lists.sourceforge.net>
To: linux-fscrypt@vger.kernel.org
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH] fscrypt: Avoid dynamic allocation in fscrypt_get_devices()
Date: Mon, 20 Jul 2026 10:45:58 -0700 [thread overview]
Message-ID: <20260720174558.GC1865@quark> (raw)
In-Reply-To: <20260719055602.78828-1-ebiggers@kernel.org>
On Sat, Jul 18, 2026 at 10:56:02PM -0700, Eric Biggers wrote:
> When a blk_crypto_key starts being used or is evicted, fs/crypto/ calls
> fscrypt_get_devices() to get the filesystem's list of block devices,
> then iterates over them and calls blk_crypto_config_supported(),
> blk_crypto_start_using_key(), or blk_crypto_evict_key() on each one.
>
> Currently, the block device pointers are placed in a dynamically
> allocated array. This dynamic allocation is problematic because:
>
> - It can fail, especially at the fscrypt_destroy_inline_crypt_key() call
> site when it's invoked for inode eviction under direct reclaim.
>
> - fscrypt_destroy_inline_crypt_key() doesn't handle the failure. It
> just zeroizes and frees the blk_crypto_key without calling
> blk_crypto_evict_key(). That causes a use-after-free.
>
> For now, let's fix this in the straightforward and easily-backportable
> way by switching to an on-stack array. Currently the fscrypt
> multi-device functionality is used only by f2fs, which has a hardcoded
> limit of 8 block devices. An on-stack array works fine for that.
>
> (Of course, this solution won't scale up to large number of block
> devices. For that we'd need a different solution, like moving the block
> device iteration into the filesystem. Or in the case of btrfs, which
> will only support blk-crypto-fallback, we should make it just call
> blk-crypto-fallback directly, so the block devices won't be needed.)
>
> Fixes: 22e9947a4b2b ("fscrypt: stop holding extra request_queue references")
> Cc: stable@vger.kernel.org
> Signed-off-by: Eric Biggers <ebiggers@kernel.org>
> ---
Applied to https://git.kernel.org/pub/scm/fs/fscrypt/linux.git/log/?h=for-current
- Eric
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2026-07-20 17:46 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-19 5:56 [f2fs-dev] [PATCH] fscrypt: Avoid dynamic allocation in fscrypt_get_devices() Eric Biggers via Linux-f2fs-devel
2026-07-19 5:56 ` Eric Biggers
2026-07-20 9:23 ` Christoph Hellwig
2026-07-20 9:23 ` [f2fs-dev] " Christoph Hellwig
2026-07-20 17:45 ` Eric Biggers [this message]
2026-07-20 17:45 ` Eric Biggers via Linux-f2fs-devel
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=20260720174558.GC1865@quark \
--to=ebiggers@kernel.org \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.