From: Satya Tangirala <satyat@google.com>
To: Eric Biggers <ebiggers@kernel.org>
Cc: linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>,
linux-fscrypt@vger.kernel.org
Subject: Re: [PATCH] block/keyslot-manager: prevent crash when num_slots=1
Date: Wed, 11 Nov 2020 09:49:51 +0000 [thread overview]
Message-ID: <20201111094951.GB3907007@google.com> (raw)
In-Reply-To: <20201111021427.466349-1-ebiggers@kernel.org>
On Tue, Nov 10, 2020 at 06:14:27PM -0800, Eric Biggers wrote:
> From: Eric Biggers <ebiggers@google.com>
>
> If there is only one keyslot, then blk_ksm_init() computes
> slot_hashtable_size=1 and log_slot_ht_size=0. This causes
> blk_ksm_find_keyslot() to crash later because it uses
> hash_ptr(key, log_slot_ht_size) to find the hash bucket containing the
> key, and hash_ptr() doesn't support the bits == 0 case.
>
> Fix this by making the hash table always have at least 2 buckets.
>
> Tested by running:
>
> kvm-xfstests -c ext4 -g encrypt -m inlinecrypt \
> -o blk-crypto-fallback.num_keyslots=1
>
> Fixes: 1b2628397058 ("block: Keyslot Manager for Inline Encryption")
> Signed-off-by: Eric Biggers <ebiggers@google.com>
> ---
> block/keyslot-manager.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/block/keyslot-manager.c b/block/keyslot-manager.c
> index 35abcb1ec051d..0a5b2772324ad 100644
> --- a/block/keyslot-manager.c
> +++ b/block/keyslot-manager.c
> @@ -103,6 +103,13 @@ int blk_ksm_init(struct blk_keyslot_manager *ksm, unsigned int num_slots)
> spin_lock_init(&ksm->idle_slots_lock);
>
> slot_hashtable_size = roundup_pow_of_two(num_slots);
> +
> + /*
> + * hash_ptr() assumes bits != 0, so ensure the hash table has at least 2
> + * buckets. This only makes a difference when there is only 1 keyslot.
> + */
> + slot_hashtable_size = max(slot_hashtable_size, 2U);
> +
> ksm->log_slot_ht_size = ilog2(slot_hashtable_size);
> ksm->slot_hashtable = kvmalloc_array(slot_hashtable_size,
> sizeof(ksm->slot_hashtable[0]),
>
> base-commit: f8394f232b1eab649ce2df5c5f15b0e528c92091
> --
> 2.29.2
>
Looks good to me. Please feel free to add
Reviewed-by: Satya Tangirala <satyat@google.com>
prev parent reply other threads:[~2020-11-11 9:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-11 2:14 [PATCH] block/keyslot-manager: prevent crash when num_slots=1 Eric Biggers
2020-11-11 9:23 ` Christoph Hellwig
2020-11-11 9:45 ` Satya Tangirala
2020-11-11 19:25 ` Eric Biggers
2020-11-11 21:50 ` Eric Biggers
2020-11-16 16:34 ` Christoph Hellwig
2020-11-11 9:49 ` Satya Tangirala [this message]
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=20201111094951.GB3907007@google.com \
--to=satyat@google.com \
--cc=axboe@kernel.dk \
--cc=ebiggers@kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-fscrypt@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.