[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAPDyKFpOuwofFGTEqkCUDXLRJ90vEypkrtg+f01KY5S=cW03Wg@mail.gmail.com>
Date: Tue, 25 Nov 2025 13:55:54 +0100
From: Ulf Hansson <ulf.hansson@...aro.org>
To: Neeraj Soni <neeraj.soni@....qualcomm.com>
Cc: adrian.hunter@...el.com, linux-mmc@...r.kernel.org,
linux-arm-msm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] mmc: host: sdhci-msm: Add support for wrapped keys
On Mon, 24 Nov 2025 at 12:29, Neeraj Soni <neeraj.soni@....qualcomm.com> wrote:
>
> Add the wrapped key support for sdhci-msm by implementing the needed
> methods in struct blk_crypto_ll_ops and setting the appropriate flag in
> blk_crypto_profile::key_types_supported.
>
> This is a reworked version of the patchset
> https://lore.kernel.org/all/20241101031539.13285-1-quic_spuppala@quicinc.com/
> that was sent by Seshu Madhavi Puppala.
>
> My changes rebase it to use the custom crypto profile support.
Part of the above is good information but doesn't belong in the commit
message. Instead make them part of the patch-information below "---".
>
> Signed-off-by: Neeraj Soni <neeraj.soni@....qualcomm.com>
Please add Eric Biggers and Abel Vesa for any changes related to ICE.
At least, if they have the time we would appreciate their input to
these kind of changes.
Kind regards
Uffe
> ---
> drivers/mmc/host/sdhci-msm.c | 51 +++++++++++++++++++++++++++++++-----
> 1 file changed, 45 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
> index 4e5edbf2fc9b..351f2a77068b 100644
> --- a/drivers/mmc/host/sdhci-msm.c
> +++ b/drivers/mmc/host/sdhci-msm.c
> @@ -1911,11 +1911,6 @@ static int sdhci_msm_ice_init(struct sdhci_msm_host *msm_host,
> if (IS_ERR_OR_NULL(ice))
> return PTR_ERR_OR_ZERO(ice);
>
> - if (qcom_ice_get_supported_key_type(ice) != BLK_CRYPTO_KEY_TYPE_RAW) {
> - dev_warn(dev, "Wrapped keys not supported. Disabling inline encryption support.\n");
> - return 0;
> - }
> -
> msm_host->ice = ice;
>
> /* Initialize the blk_crypto_profile */
> @@ -1929,7 +1924,7 @@ static int sdhci_msm_ice_init(struct sdhci_msm_host *msm_host,
>
> profile->ll_ops = sdhci_msm_crypto_ops;
> profile->max_dun_bytes_supported = 4;
> - profile->key_types_supported = BLK_CRYPTO_KEY_TYPE_RAW;
> + profile->key_types_supported = qcom_ice_get_supported_key_type(ice);
> profile->dev = dev;
>
> /*
> @@ -2009,9 +2004,53 @@ static int sdhci_msm_ice_keyslot_evict(struct blk_crypto_profile *profile,
> return qcom_ice_evict_key(msm_host->ice, slot);
> }
>
> +static int sdhci_msm_ice_derive_sw_secret(struct blk_crypto_profile *profile,
> + const u8 *eph_key, size_t eph_key_size,
> + u8 sw_secret[BLK_CRYPTO_SW_SECRET_SIZE])
> +{
> + struct sdhci_msm_host *msm_host =
> + sdhci_msm_host_from_crypto_profile(profile);
> +
> + return qcom_ice_derive_sw_secret(msm_host->ice, eph_key, eph_key_size,
> + sw_secret);
> +}
> +
> +static int sdhci_msm_ice_import_key(struct blk_crypto_profile *profile,
> + const u8 *raw_key, size_t raw_key_size,
> + u8 lt_key[BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE])
> +{
> + struct sdhci_msm_host *msm_host =
> + sdhci_msm_host_from_crypto_profile(profile);
> +
> + return qcom_ice_import_key(msm_host->ice, raw_key, raw_key_size, lt_key);
> +}
> +
> +static int sdhci_msm_ice_generate_key(struct blk_crypto_profile *profile,
> + u8 lt_key[BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE])
> +{
> + struct sdhci_msm_host *msm_host =
> + sdhci_msm_host_from_crypto_profile(profile);
> +
> + return qcom_ice_generate_key(msm_host->ice, lt_key);
> +}
> +
> +static int sdhci_msm_ice_prepare_key(struct blk_crypto_profile *profile,
> + const u8 *lt_key, size_t lt_key_size,
> + u8 eph_key[BLK_CRYPTO_MAX_HW_WRAPPED_KEY_SIZE])
> +{
> + struct sdhci_msm_host *msm_host =
> + sdhci_msm_host_from_crypto_profile(profile);
> +
> + return qcom_ice_prepare_key(msm_host->ice, lt_key, lt_key_size, eph_key);
> +}
> +
> static const struct blk_crypto_ll_ops sdhci_msm_crypto_ops = {
> .keyslot_program = sdhci_msm_ice_keyslot_program,
> .keyslot_evict = sdhci_msm_ice_keyslot_evict,
> + .derive_sw_secret = sdhci_msm_ice_derive_sw_secret,
> + .import_key = sdhci_msm_ice_import_key,
> + .generate_key = sdhci_msm_ice_generate_key,
> + .prepare_key = sdhci_msm_ice_prepare_key,
> };
>
> #else /* CONFIG_MMC_CRYPTO */
> --
> 2.34.1
>
Powered by blists - more mailing lists