From: Jorge Ramirez <jorge.ramirez@oss.qualcomm.com>
To: Jorge Ramirez-Ortiz <jorge.ramirez@oss.qualcomm.com>
Cc: James.Bottomley@hansenpartnership.com,
martin.petersen@oracle.com, alim.akhtar@samsung.com,
avri.altman@wdc.com, bvanassche@acm.org,
can.guo@oss.qualcomm.com, beanhuo@micron.com,
linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org,
jenswi@kernel.org, sumit.garg@oss.qualcomm.com
Subject: Re: [PATCH v2 2/2] ufs: rpmb: use a fixed-length RPMB dev_id
Date: Thu, 20 Aug 2026 09:56:06 +0200 [thread overview]
Message-ID: <aoazFihNtmySWtM4@trex> (raw)
In-Reply-To: <20260720091614.544968-3-jorge.ramirez@oss.qualcomm.com>
On 20/07/26 11:16:11, Jorge Ramirez-Ortiz wrote:
> The RPMB authentication key is derived from the dev_id handed to the
> RPMB subsystem. OP-TEE implements the eMMC RPMB flow, where the dev_id
> is the eMMC CID, a fixed 16-byte value, and it derives the key on that
> assumption.
>
> The UFS RPMB id built here is "<device_id>-R<region>", which is variable
> length and longer than 16 bytes. Passing it verbatim would tie the
> derived key to a length OP-TEE does not expect and diverge from the
> fixed-CID eMMC ABI, requiring OP-TEE to be taught about variable-length
> UFS ids.
>
> Hash the UFS id into a fixed 16-byte dev_id with blake2b instead. This
> keeps the derived key stable and unique per region while matching the
> eMMC CID layout OP-TEE relies on, so the key-derivation ABI stays
> identical and no OP-TEE change is needed. blake2b is used because it is
> already available in bootloaders such as U-Boot that must derive the
> same dev_id, avoiding the need to add a blake2s implementation there.
>
> Signed-off-by: Jorge Ramirez-Ortiz <jorge.ramirez@oss.qualcomm.com>
> ---
> drivers/ufs/Kconfig | 1 +
> drivers/ufs/core/ufs-rpmb.c | 19 +++++++++++++++++--
> 2 files changed, 18 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/ufs/Kconfig b/drivers/ufs/Kconfig
> index f662e7ce71f1..b62c00e7ff06 100644
> --- a/drivers/ufs/Kconfig
> +++ b/drivers/ufs/Kconfig
> @@ -7,6 +7,7 @@ menuconfig SCSI_UFSHCD
> tristate "Universal Flash Storage Controller"
> depends on SCSI && SCSI_DMA
> depends on RPMB || !RPMB
> + select CRYPTO_LIB_BLAKE2B if RPMB
> select PM_DEVFREQ
> select DEVFREQ_GOV_SIMPLE_ONDEMAND
> select NLS
> diff --git a/drivers/ufs/core/ufs-rpmb.c b/drivers/ufs/core/ufs-rpmb.c
> index d0c7ea7a36f4..0d8399b6497a 100644
> --- a/drivers/ufs/core/ufs-rpmb.c
> +++ b/drivers/ufs/core/ufs-rpmb.c
> @@ -10,6 +10,7 @@
> * Can Guo <can.guo@oss.qualcomm.com>
> */
>
> +#include <crypto/blake2b.h>
> #include <linux/module.h>
> #include <linux/device.h>
> #include <linux/kernel.h>
> @@ -21,6 +22,7 @@
> #include <linux/unaligned.h>
> #include "ufshcd-priv.h"
>
> +#define UFS_RPMB_ID_LEN 16 /* Match eMMC CID Length */
> #define UFS_RPMB_SEC_PROTOCOL 0xEC /* JEDEC UFS application */
> #define UFS_RPMB_SEC_PROTOCOL_ID 0x01 /* JEDEC UFS RPMB protocol ID, CDB byte3 */
>
> @@ -154,6 +156,7 @@ int ufs_rpmb_probe(struct ufs_hba *hba)
> {
> struct ufs_rpmb_dev *ufs_rpmb, *it, *tmp;
> struct rpmb_dev *rdev;
> + char *dev_id = NULL;
> char *cid = NULL;
> int region;
> u32 cap;
> @@ -213,8 +216,17 @@ int ufs_rpmb_probe(struct ufs_hba *hba)
> goto err_out;
> }
>
> - descr.dev_id = cid;
> - descr.dev_id_len = strlen(cid);
> + dev_id = kzalloc(UFS_RPMB_ID_LEN, GFP_KERNEL);
> + if (!dev_id) {
> + device_unregister(&ufs_rpmb->dev);
> + ret = -ENOMEM;
> + goto err_out;
> + }
> +
> + blake2b(NULL, 0, cid, strlen(cid), dev_id, UFS_RPMB_ID_LEN);
> +
> + descr.dev_id = dev_id;
> + descr.dev_id_len = UFS_RPMB_ID_LEN;
> descr.capacity = cap;
>
> /* Register RPMB device */
> @@ -228,6 +240,8 @@ int ufs_rpmb_probe(struct ufs_hba *hba)
>
> kfree(cid);
> cid = NULL;
> + kfree(dev_id);
> + dev_id = NULL;
>
> ufs_rpmb->rdev = rdev;
> ufs_rpmb->region_id = region;
> @@ -240,6 +254,7 @@ int ufs_rpmb_probe(struct ufs_hba *hba)
> return 0;
> err_out:
> kfree(cid);
> + kfree(dev_id);
> list_for_each_entry_safe(it, tmp, &hba->rpmbs, node) {
> list_del(&it->node);
> device_unregister(&it->dev);
> --
> 2.54.0
>
hi again Bean, any changes on this change? if so, would you mind updating it please?
next prev parent reply other threads:[~2026-08-20 7:56 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-20 9:16 [PATCH v1 0/2] ufs: rpmb: make RPMB usable with OP-TEE key derivation Jorge Ramirez-Ortiz
2026-07-20 9:16 ` [PATCH v2 1/2] ufs: rpmb: retry power-on UNIT ATTENTION on the RPMB WLUN Jorge Ramirez-Ortiz
2026-07-20 9:16 ` [PATCH v2 2/2] ufs: rpmb: use a fixed-length RPMB dev_id Jorge Ramirez-Ortiz
2026-07-20 9:28 ` sashiko-bot
2026-08-20 7:56 ` Jorge Ramirez [this message]
2026-07-20 10:23 ` [PATCH v1 0/2] ufs: rpmb: make RPMB usable with OP-TEE key derivation Bean Huo
2026-07-20 10:56 ` Jorge Ramirez
2026-08-05 14:51 ` Jorge Ramirez
2026-08-05 16:18 ` Bean Huo
2026-08-06 9:36 ` Jorge Ramirez
2026-08-12 6:54 ` Jorge Ramirez
2026-08-17 14:41 ` Jorge Ramirez
2026-08-17 14:46 ` Bean Huo
2026-08-20 7:54 ` Jorge Ramirez
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=aoazFihNtmySWtM4@trex \
--to=jorge.ramirez@oss.qualcomm.com \
--cc=James.Bottomley@hansenpartnership.com \
--cc=alim.akhtar@samsung.com \
--cc=avri.altman@wdc.com \
--cc=beanhuo@micron.com \
--cc=bvanassche@acm.org \
--cc=can.guo@oss.qualcomm.com \
--cc=jenswi@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=sumit.garg@oss.qualcomm.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 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.