Discussion of the implementations of VIRTIO specification
 help / color / mirror / Atom feed
From: Linlin Zhang <linlin.zhang@oss.qualcomm.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Eric Biggers <ebiggers@kernel.org>,
	virtio-dev@lists.linux.dev, neeraj.soni@oss.qualcomm.com
Subject: Re: [PATCH v1] virtio-blk: Add inline encryption support
Date: Thu, 20 Aug 2026 22:37:47 +0800	[thread overview]
Message-ID: <5d1a54d2-9e84-4a85-9124-ac9cbff75fdf@oss.qualcomm.com> (raw)
In-Reply-To: <20260819193555.GA470114@fedora>



On 8/20/2026 3:35 AM, Stefan Hajnoczi wrote:
> On Wed, Aug 19, 2026 at 07:30:15PM +0800, Linlin Zhang wrote:
>>
>>
>> On 8/19/2026 12:33 PM, Eric Biggers wrote:
>>> On Fri, Aug 14, 2026 at 07:23:01AM -0700, Linlin Zhang wrote:
>>>> When the feature is negotiated, the device reports inline encryption
>>>> characteristics through virtio_blk_enc_characteristics. Add
>>>> VIRTIO_BLK_T_GET_CRYPTO_MODES, VIRTIO_BLK_T_CRYPTO_IN, and
>>>> VIRTIO_BLK_T_CRYPTO_OUT so that the driver can discover supported
>>>> crypto modes and submit inline-encrypted I/O requests.
>>>
>>> How is the driver expected to program and evict keyslots?
>>
>> There are 2 new added drivers, one is virtio blk extension driver which is
>> generic, and the other is crypto virtualization driver which is vendor
>> specific.
>>
>> The virtio blk extension driver manages the initialization of blk-crypto-profile,
>> and implements the interfaces of blk_crypto_ll_ops.
>>
>> The crypto virtualization driver performs similar operation like the key handling
>> part in ufs-qcom and ice drivers. It forwards the key program/eviction request to
>> Trust Zone via SMC call.
>>
>> For QCOM, the whole flow of key program/eviction is like
>>   - block layer passes the request to virtio_blk extension driver via blk_crypto_ll_ops
>>   - virtio_blk extension -> crypto virtualization -> qcom_scm -> SCM -> HYP ->TZ
> 
> Can you annotate this with "guest" and "host"? Here is my guess:
> - virtio_blk + extension driver: guest
> - crypto virtualization + qcom_scm + SCM: guest
> - HYP: host
> - TZ: host
> 
> If this is correct, then it's unclear to me why a vendor-specific guest
> component is involved?

Thanks for your comments!

That 's correct basically.

- Guest VM
- virtio-blk + virtio-blk crypto extension
- crypto virtualization driver + qcom_scm
- SCM interface

- Secure World/Platform
- Hypervisor
- Trust Zone

The primary purpose of introducing a vendor-specific guest component is to
enable the guest VM to handle key programming and eviction directly through
TrustZone, avoiding any dependency on the primary VM for these operations.

Because SCM firmware interfaces can differ across vendors, the design
introduces an intermediate crypto virtualization layer. This layer provides
a common abstraction for key management operations, while allowing each
vendor to implement the backend interfaces according to its specific SCM
firmware and security architecture.

> 
> What is the advantage of shipping qcom_scm inside the guest versus
> defining a standard virtio-blk interface for blk_crypto_ll_ops that the
> hypervisor's virtio-blk device implements via TZ on the host?

Keeping SCM in the guest preserves key isolation, minimizes virtio-blk
payloads, and avoids additional inter-VM communication.

Key programming occurs after a request has entered the block request
queue. Performing it through a standard virtio-blk request would require
issuing key request in the same request before handling I/O path,
introducing dead lock concerns.

In my opinion, passing the encryption key in each virtio-blk request is
also undesirable, as it exposes key material outside the guest, increases
request size, and adds VM transition overhead.

> 
> (We talked about this in the past, but I am still not familiar enough
> with the Qualcomm hypervisor architecture to understand.)
> 
> Thanks,
> Stefan

  reply	other threads:[~2026-08-20 14:37 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-14 14:23 [PATCH v1] virtio-blk: Add inline encryption support Linlin Zhang
2026-08-17 17:16 ` Stefan Hajnoczi
2026-08-18  4:53   ` Linlin Zhang
     [not found] ` <20260819042915.GA9971@sol>
2026-08-19 11:10   ` Linlin Zhang
     [not found] ` <20260819043321.GB9971@sol>
2026-08-19 11:30   ` Linlin Zhang
2026-08-19 19:35     ` Stefan Hajnoczi
2026-08-20 14:37       ` Linlin Zhang [this message]
2026-08-19 21:18 ` Stefan Hajnoczi
2026-08-20 16:18   ` Linlin Zhang
  -- strict thread matches above, loose matches on Subject: below --
2026-01-27 14:14 Linlin Zhang
2026-01-27 14:20 ` Linlin Zhang
2026-01-27 21:09   ` Stefan Hajnoczi
2026-01-30 10:23     ` Linlin Zhang
2026-02-02 15:56       ` Stefan Hajnoczi
2026-02-03 10:06         ` Linlin Zhang
2026-02-03 14:43           ` Stefan Hajnoczi
2026-02-04 13:57             ` Linlin Zhang
2026-02-04 17:27               ` Stefan Hajnoczi

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=5d1a54d2-9e84-4a85-9124-ac9cbff75fdf@oss.qualcomm.com \
    --to=linlin.zhang@oss.qualcomm.com \
    --cc=ebiggers@kernel.org \
    --cc=neeraj.soni@oss.qualcomm.com \
    --cc=stefanha@redhat.com \
    --cc=virtio-dev@lists.linux.dev \
    /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