From: Bartosz Golaszewski <brgl@bgdev.pl>
To: Jens Axboe <axboe@kernel.dk>, Jonathan Corbet <corbet@lwn.net>,
Alasdair Kergon <agk@redhat.com>,
Mike Snitzer <snitzer@kernel.org>,
Mikulas Patocka <mpatocka@redhat.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Asutosh Das <quic_asutoshd@quicinc.com>,
Ritesh Harjani <ritesh.list@gmail.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Alim Akhtar <alim.akhtar@samsung.com>,
Avri Altman <avri.altman@wdc.com>,
Bart Van Assche <bvanassche@acm.org>,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>,
Eric Biggers <ebiggers@kernel.org>,
"Theodore Y. Ts'o" <tytso@mit.edu>,
Jaegeuk Kim <jaegeuk@kernel.org>,
Alexander Viro <viro@zeniv.linux.org.uk>,
Christian Brauner <brauner@kernel.org>, Jan Kara <jack@suse.cz>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
Gaurav Kashyap <quic_gaurkash@quicinc.com>,
Neil Armstrong <neil.armstrong@linaro.org>
Cc: linux-block@vger.kernel.org, linux-doc@vger.kernel.org,
linux-kernel@vger.kernel.org, dm-devel@lists.linux.dev,
linux-mmc@vger.kernel.org, linux-scsi@vger.kernel.org,
linux-fscrypt@vger.kernel.org, linux-fsdevel@vger.kernel.org,
linux-arm-msm@vger.kernel.org,
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>,
Eric Biggers <ebiggers@google.com>,
Om Prakash Singh <quic_omprsing@quicinc.com>
Subject: [PATCH v6 00/17] Hardware wrapped key support for QCom ICE and UFS core
Date: Fri, 06 Sep 2024 20:07:03 +0200 [thread overview]
Message-ID: <20240906-wrapped-keys-v6-0-d59e61bc0cb4@linaro.org> (raw)
I took this work over from Gaurav Kashyap and integrated Eric's series
into it for an easier discussion on the actual API to be used for
wrapped keys as well as if and how to enable users to indicate whether
wrapped keys should be used at all.
I know Dmitry's opinion on that and expect this to be more of an RFC
rather than a real patch series. That being said, what is here, works
fine on sm8650.
Hardware-wrapped keys are encrypted keys that can only be unwrapped
(decrypted) and used by hardware - either by the inline encryption
hardware itself, or by a dedicated hardware block that can directly
provision keys to the inline encryption hardware. For more details,
please see patches 1-3 in this series which extend the inline encryption
docs with more information.
This series adds support for wrapped keys to the block layer, fscrypt
and then build upwards from there by implementing relevant callbacks in
QCom SCM driver, then the ICE driver and finally in UFS core and QCom
layer.
Tested on sm8650-qrd.
How to test:
Use the wip-wrapped-keys branch from https://github.com/ebiggers/fscryptctl
to build a custom fscryptctl that supports generating wrapped keys.
Enable the following config options:
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_QCOM_INLINE_CRYPTO_ENGINE=m
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_SCSI_UFS_CRYPTO=y
$ mkfs.ext4 -F -O encrypt,stable_inodes /dev/disk/by-partlabel/userdata
$ mount /dev/disk/by-partlabel/userdata -o inlinecrypt /mnt
$ fscryptctl generate_hw_wrapped_key /dev/disk/by-partlabel/userdata > /mnt/key.longterm
$ fscryptctl prepare_hw_wrapped_key /dev/disk/by-partlabel/userdata < /mnt/key.longterm > /tmp/key.ephemeral
$ KEYID=$(fscryptctl add_key --hw-wrapped-key < /tmp/key.ephemeral /mnt)
$ rm -rf /mnt/dir
$ mkdir /mnt/dir
$ fscryptctl set_policy --hw-wrapped-key --iv-ino-lblk-64 "$KEYID" /mnt/dir
$ dmesg > /mnt/dir/test.txt
$ sync
Reboot the board
$ mount /dev/disk/by-partlabel/userdata -o inlinecrypt /mnt
$ ls /mnt/dir
$ fscryptctl prepare_hw_wrapped_key /dev/disk/by-partlabel/userdata < /mnt/key.longterm > /tmp/key.ephemeral
$ KEYID=$(fscryptctl add_key --hw-wrapped-key < /tmp/key.ephemeral /mnt)
$ fscryptctl set_policy --hw-wrapped-key --iv-ino-lblk-64 "$KEYID" /mnt/dir
$ cat /mnt/dir/test.txt # File should now be decrypted
Changes since v5:
- add the wrapped key support from Eric Biggers to the series
- remove the new DT property from the series and instead query the
at run-time rustZone to find out if wrapped keys are supported
- make the wrapped key support into a UFS capability, not a quirk
- improve kerneldocs
- improve and rework coding style in most patches
- improve and reformat commit messages
- simplify the offset calculation for CRYPTOCFG
- split out the DTS changes into a separate series
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
Bartosz Golaszewski (1):
firmware: qcom: scm: add a call for checking wrapped key support
Eric Biggers (4):
blk-crypto: add basic hardware-wrapped key support
blk-crypto: show supported key types in sysfs
blk-crypto: add ioctls to create and prepare hardware-wrapped keys
fscrypt: add support for hardware-wrapped keys
Gaurav Kashyap (12):
ice, ufs, mmc: use the blk_crypto_key struct when programming the key
firmware: qcom: scm: add a call for deriving the software secret
firmware: qcom: scm: add calls for creating, preparing and importing keys
soc: qcom: ice: add HWKM support to the ICE driver
soc: qcom: ice: add support for hardware wrapped keys
soc: qcom: ice: add support for generating, importing and preparing keys
ufs: core: add support for wrapped keys to UFS core
ufs: core: add support for deriving the software secret
ufs: core: add support for generating, importing and preparing keys
ufs: host: add support for wrapped keys in QCom UFS
ufs: host: add a callback for deriving software secrets and use it
ufs: host: add support for generating, importing and preparing wrapped keys
Documentation/ABI/stable/sysfs-block | 18 ++
Documentation/block/inline-encryption.rst | 245 +++++++++++++-
Documentation/filesystems/fscrypt.rst | 154 ++++++++-
Documentation/userspace-api/ioctl/ioctl-number.rst | 2 +
block/blk-crypto-fallback.c | 5 +-
block/blk-crypto-internal.h | 10 +
block/blk-crypto-profile.c | 103 ++++++
block/blk-crypto-sysfs.c | 35 ++
block/blk-crypto.c | 194 ++++++++++-
block/ioctl.c | 5 +
drivers/firmware/qcom/qcom_scm.c | 233 ++++++++++++++
drivers/firmware/qcom/qcom_scm.h | 4 +
drivers/md/dm-table.c | 1 +
drivers/mmc/host/cqhci-crypto.c | 9 +-
drivers/mmc/host/cqhci.h | 2 +
drivers/mmc/host/sdhci-msm.c | 6 +-
drivers/soc/qcom/ice.c | 355 ++++++++++++++++++++-
drivers/ufs/core/ufshcd-crypto.c | 86 ++++-
drivers/ufs/host/ufs-qcom.c | 61 +++-
fs/crypto/fscrypt_private.h | 71 ++++-
fs/crypto/hkdf.c | 4 +-
fs/crypto/inline_crypt.c | 44 ++-
fs/crypto/keyring.c | 124 +++++--
fs/crypto/keysetup.c | 54 +++-
fs/crypto/keysetup_v1.c | 5 +-
fs/crypto/policy.c | 11 +-
include/linux/blk-crypto-profile.h | 73 +++++
include/linux/blk-crypto.h | 75 ++++-
include/linux/firmware/qcom/qcom_scm.h | 8 +
include/soc/qcom/ice.h | 18 +-
include/uapi/linux/blk-crypto.h | 44 +++
include/uapi/linux/fs.h | 6 +-
include/uapi/linux/fscrypt.h | 7 +-
include/ufs/ufshcd.h | 21 ++
34 files changed, 1958 insertions(+), 135 deletions(-)
---
base-commit: ad40aff1edffeccc412cde93894196dca7bc739e
change-id: 20240802-wrapped-keys-eea0032fbfed
Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
next reply other threads:[~2024-09-06 18:07 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-06 18:07 Bartosz Golaszewski [this message]
2024-09-06 18:07 ` [PATCH v6 01/17] blk-crypto: add basic hardware-wrapped key support Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 02/17] blk-crypto: show supported key types in sysfs Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 03/17] blk-crypto: add ioctls to create and prepare hardware-wrapped keys Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 04/17] fscrypt: add support for " Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 05/17] ice, ufs, mmc: use the blk_crypto_key struct when programming the key Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 06/17] firmware: qcom: scm: add a call for deriving the software secret Bartosz Golaszewski
2024-09-09 11:23 ` Konrad Dybcio
2024-09-26 14:45 ` Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 07/17] firmware: qcom: scm: add calls for creating, preparing and importing keys Bartosz Golaszewski
2024-09-09 11:24 ` Konrad Dybcio
2024-09-06 18:07 ` [PATCH v6 08/17] firmware: qcom: scm: add a call for checking wrapped key support Bartosz Golaszewski
2024-09-09 11:25 ` Konrad Dybcio
2024-09-06 18:07 ` [PATCH v6 09/17] soc: qcom: ice: add HWKM support to the ICE driver Bartosz Golaszewski
2024-09-06 22:07 ` Dmitry Baryshkov
2024-09-09 8:58 ` Neil Armstrong
2024-09-09 9:44 ` Dmitry Baryshkov
2024-09-10 0:51 ` Gaurav Kashyap (QUIC)
2024-09-10 6:28 ` Dmitry Baryshkov
2024-09-12 22:17 ` Gaurav Kashyap (QUIC)
2024-09-12 23:17 ` Eric Biggers
2024-09-13 4:28 ` Dmitry Baryshkov
2024-09-13 4:57 ` Eric Biggers
2024-09-13 12:21 ` Dmitry Baryshkov
2024-09-21 19:49 ` Eric Biggers
2024-09-21 22:33 ` Dmitry Baryshkov
2024-09-13 7:23 ` Neil Armstrong
2024-09-06 18:07 ` [PATCH v6 10/17] soc: qcom: ice: add support for hardware wrapped keys Bartosz Golaszewski
2024-09-09 11:51 ` Konrad Dybcio
2024-09-06 18:07 ` [PATCH v6 11/17] soc: qcom: ice: add support for generating, importing and preparing keys Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 12/17] ufs: core: add support for wrapped keys to UFS core Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 13/17] ufs: core: add support for deriving the software secret Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 14/17] ufs: core: add support for generating, importing and preparing keys Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 15/17] ufs: host: add support for wrapped keys in QCom UFS Bartosz Golaszewski
2024-09-06 18:07 ` [PATCH v6 16/17] ufs: host: add a callback for deriving software secrets and use it Bartosz Golaszewski
2024-09-09 11:56 ` Konrad Dybcio
2024-09-06 18:07 ` [PATCH v6 17/17] ufs: host: add support for generating, importing and preparing wrapped keys Bartosz Golaszewski
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=20240906-wrapped-keys-v6-0-d59e61bc0cb4@linaro.org \
--to=brgl@bgdev.pl \
--cc=James.Bottomley@HansenPartnership.com \
--cc=adrian.hunter@intel.com \
--cc=agk@redhat.com \
--cc=alim.akhtar@samsung.com \
--cc=andersson@kernel.org \
--cc=avri.altman@wdc.com \
--cc=axboe@kernel.dk \
--cc=bartosz.golaszewski@linaro.org \
--cc=brauner@kernel.org \
--cc=bvanassche@acm.org \
--cc=corbet@lwn.net \
--cc=dm-devel@lists.linux.dev \
--cc=dmitry.baryshkov@linaro.org \
--cc=ebiggers@google.com \
--cc=ebiggers@kernel.org \
--cc=jack@suse.cz \
--cc=jaegeuk@kernel.org \
--cc=konradybcio@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-fscrypt@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=martin.petersen@oracle.com \
--cc=mpatocka@redhat.com \
--cc=neil.armstrong@linaro.org \
--cc=quic_asutoshd@quicinc.com \
--cc=quic_gaurkash@quicinc.com \
--cc=quic_omprsing@quicinc.com \
--cc=ritesh.list@gmail.com \
--cc=snitzer@kernel.org \
--cc=tytso@mit.edu \
--cc=ulf.hansson@linaro.org \
--cc=viro@zeniv.linux.org.uk \
/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;
as well as URLs for NNTP newsgroup(s).