Discussion of the implementations of VIRTIO specification
 help / color / mirror / Atom feed
From: Stefan Hajnoczi <stefanha@redhat.com>
To: Linlin Zhang <linlin.zhang@oss.qualcomm.com>
Cc: virtio-dev@lists.linux.dev, ebiggers@kernel.org,
	neeraj.soni@oss.qualcomm.com
Subject: Re: [PATCH v1] virtio-blk: Add inline encryption support
Date: Mon, 17 Aug 2026 13:16:50 -0400	[thread overview]
Message-ID: <20260817171650.GC143460@fedora> (raw)
In-Reply-To: <20260814142306.3934029-1-linlin.zhang@oss.qualcomm.com>

[-- Attachment #1: Type: text/plain, Size: 22733 bytes --]

On Fri, Aug 14, 2026 at 07:23:01AM -0700, Linlin Zhang wrote:
> From: linlzhan <linlin.zhang@oss.qualcomm.com>
> 
> Add VIRTIO_BLK_F_IE to advertise inline encryption support.
> 
> 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.
> 
> Crypto I/O requests carry a virtual key slot index, data unit size,
> and initial Data Unit Number (DUN). The device maps the virtual key
> slot to a physical key slot in the storage backend and uses these
> parameters for inline encryption or decryption.
> 
> Key provisioning is performed through an out-of-band mechanism and is
> outside the scope of this device type.
> 
> For background on inline encryption in UFS and eMMC storage, see:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/block/inline-encryption.rst
> 
> Change-Id: I83c52456bc0c9dd37f39ff46e6bfe73a715138ca
> Signed-off-by: linlzhan <linlin.zhang@oss.qualcomm.com>
> Fixes: https://github.com/oasis-tcs/virtio-spec/issues/238
> ---
>  device-types/blk/description.tex | 297 ++++++++++++++++++++++++++++++-
>  1 file changed, 291 insertions(+), 6 deletions(-)

Hi,
I will review this on Wednesday, August 19th.

In the meantime, is there a changelog from your previous patch series?

Stefan

> 
> diff --git a/device-types/blk/description.tex b/device-types/blk/description.tex
> index 3b3a4e7..f8a544b 100644
> --- a/device-types/blk/description.tex
> +++ b/device-types/blk/description.tex
> @@ -71,7 +71,16 @@ \subsection{Feature bits}\label{sec:Device Types / Block Device / Feature bits}
>  
>  \item[VIRTIO_BLK_F_REQ_FLAGS_OUT_FUA (19)] Device supports the
>      VIRTIO_BLK_REQ_FLAG_OUT_FUA flag in the \field{flags} bitfield of the
> -    \field{virtio_blk_req} structure for VIRTIO_BLK_T_OUT requests.
> +    request for VIRTIO_BLK_T_OUT and VIRTIO_BLK_T_CRYPTO_OUT requests.
> +
> +\item[VIRTIO_BLK_F_IE (22)] Only when the storage backend supports inline
> +    encryption and this feature bit is negotiated, the data read from or
> +    written to the device can be decrypted from or encrypted to the storage
> +    via inline crypto engine. Keys are provisioned into key slots of the
> +    inline crypto engine through a mechanism outside the scope of this device
> +    type, and requests identify, by key slot index, which provisioned key to
> +    use. The number of key slots, the maximum DUN size and the supported key
> +    types are reported in \field{enc_characteristics}.
>  
>  \end{description}
>  
> @@ -135,6 +144,12 @@ \subsection{Device configuration layout}\label{sec:Device Types / Block Device /
>                  u8 model;
>                  u8 unused2[3];
>          } zoned;
> +        struct virtio_blk_enc_characteristics {
> +                le16 max_slots;
> +                u8 max_dun_bytes;
> +                u8 key_types;
> +                le32 unused3;
> +        } enc_characteristics;
>  };
>  \end{lstlisting}
>  
> @@ -222,6 +237,39 @@ \subsection{Device configuration layout}\label{sec:Device Types / Block Device /
>  terminated by the device with a "zone resources exceeded" error as defined for
>  specific commands later.
>  
> +If the VIRTIO_BLK_F_IE feature is negotiated, then in
> +\field{virtio_blk_enc_characteristics},
> +\begin{itemize}
> +\item \field{max_slots} is the number of key slots allocated to the Guest VM.
> +    It MUST not exceed the number of key slots supported by the inline crypto
> +    engine of the device backend storage. Key slots are indexed from 0 to
> +    \field{max_slots} - 1.
> +
> +\item \field{max_dun_bytes} is the maximum number of bytes of the Data Unit
> +    Number (DUN) that the device supports for any of its supported crypto
> +    modes. For example, known inline crypto engines report a
> +    \field{max_dun_bytes} of 4 (JEDEC eMMC Command Queue Host Controller
> +    Interface, CQHCI) or 8 (JEDEC UFS Host Controller Interface, UFSHCI);
> +    a device backed by different inline crypto engine hardware MAY report
> +    a different value, subject to the constraints in
> +    \ref{devicenormative:Device Types / Block Device / Device Initialization}.
> +
> +\item \field{key_types} is a bitmask of the key types the device supports,
> +    using the following values:
> +    \begin{lstlisting}
> +#define VIRTIO_BLK_CRYPTO_KEY_TYPE_RAW    (1 << 0)
> +#define VIRTIO_BLK_CRYPTO_KEY_TYPE_HW_WRAPPED  (1 << 1)
> +    \end{lstlisting}
> +    VIRTIO_BLK_CRYPTO_KEY_TYPE_RAW indicates that keys are provisioned into
> +    key slots in raw (plaintext) form. VIRTIO_BLK_CRYPTO_KEY_TYPE_HW_WRAPPED
> +    indicates that the key exists only in ephemerally-wrapped form in memory
> +    outside of dedicated hardware, and can only be unwrapped and provisioned
> +    into key slots by dedicated hardware (e.g. a hardware key manager). The
> +    plaintext key never exists in software-accessible memory.
> +
> +\item \field{unused3} is reserved for future use.
> +\end{itemize}
> +
>  \subsubsection{Legacy Interface: Device configuration layout}\label{sec:Device Types / Block Device / Device configuration layout / Legacy Interface: Device configuration layout}
>  When using the legacy interface, transitional devices and drivers
>  MUST format the fields in struct virtio_blk_config
> @@ -285,6 +333,14 @@ \subsection{Device Initialization}\label{sec:Device Types / Block Device / Devic
>      \field{zoned} can be read by the driver to determine the zone
>      characteristics of the device. All \field{zoned} fields are read-only.
>  
> +\item If the VIRTIO_BLK_F_IE feature is negotiated, the fields in
> +    \field{enc_characteristics} can be read by the driver to determine the
> +    inline encryption capabilities of the device, and a
> +    VIRTIO_BLK_T_GET_CRYPTO_MODES request (see
> +    \ref{sec:Device Types / Block Device / Device Operation}) can be sent
> +    to retrieve the set of supported crypto modes. All
> +    \field{enc_characteristics} fields are read-only.
> +
>  \end{enumerate}
>  
>  \drivernormative{\subsubsection}{Device Initialization}{Device Types / Block Device / Device Initialization}
> @@ -312,6 +368,10 @@ \subsection{Device Initialization}\label{sec:Device Types / Block Device / Devic
>  offered by the device with the VIRTIO_BLK_Z_HA or VIRTIO_BLK_Z_NONE zone model,
>  then the driver MAY negotiate these two bits independently.
>  
> +Zoned devices do not support inline encryption. If the VIRTIO_BLK_F_ZONED
> +feature is offered by the device, then the VIRTIO_BLK_F_IE feature MUST NOT
> +be negotiated by the driver.
> +
>  If the VIRTIO_BLK_F_ZONED feature is negotiated, then
>  \begin{itemize}
>  \item if the driver that can not support host-managed zoned devices
> @@ -327,6 +387,12 @@ \subsection{Device Initialization}\label{sec:Device Types / Block Device / Devic
>  The driver MUST NOT negotiate VIRTIO_BLK_F_REQ_FLAGS_OUT_FUA without
>  VIRTIO_BLK_F_REQ_FLAGS.
>  
> +Drivers MUST NOT negotiate the VIRTIO_BLK_F_IE feature if they are
> +incapable of provisioning keys into the key slots of the device backend
> +storage's inline crypto engine, or of conveying the key slot index,
> +data unit size in bits, and Data Unit Number (DUN) per request to
> +the device using the \field{virtio_blk_crypto_msg} structure.
> +
>  \devicenormative{\subsubsection}{Device Initialization}{Device Types / Block Device / Device Initialization}
>  
>  Devices SHOULD always offer VIRTIO_BLK_F_FLUSH, and MUST offer it
> @@ -341,9 +407,15 @@ \subsection{Device Initialization}\label{sec:Device Types / Block Device / Devic
>  If the device that is being initialized is a not a zoned device, the device
>  SHOULD NOT offer the VIRTIO_BLK_F_ZONED feature.
>  
> +A zoned device MUST NOT offer the VIRTIO_BLK_F_IE feature.
> +
>  The VIRTIO_BLK_F_ZONED feature cannot be properly negotiated without
>  FEATURES_OK bit. Legacy devices MUST NOT offer VIRTIO_BLK_F_ZONED feature bit.
>  
> +The VIRTIO_BLK_F_IE feature cannot be properly negotiated without
> +FEATURES_OK bit. Legacy devices MUST NOT offer the VIRTIO_BLK_F_IE feature
> +bit.
> +
>  If the VIRTIO_BLK_F_ZONED feature is not accepted by the driver,
>  \begin{itemize}
>  \item the device with the VIRTIO_BLK_Z_HA or VIRTIO_BLK_Z_NONE zone model SHOULD
> @@ -415,6 +487,26 @@ \subsection{Device Initialization}\label{sec:Device Types / Block Device / Devic
>  The device MUST NOT acknowledge FEATURES_OK if the driver sets
>  VIRTIO_BLK_F_REQ_FLAGS_OUT_FUA without VIRTIO_BLK_F_REQ_FLAGS.
>  
> +The device MUST NOT acknowledge FEATURES_OK if the driver negotiates both
> +VIRTIO_BLK_F_ZONED and VIRTIO_BLK_F_IE.
> +
> +If the device is incapable of consuming the \field{virtio_blk_crypto_msg},
> +the device SHOULD NOT offer the VIRTIO_BLK_F_IE feature.
> +
> +If the VIRTIO_BLK_F_IE feature is negotiated, the device MUST set
> +\field{max_slots} in \field{enc_characteristics} to a value greater than 0.
> +
> +If the VIRTIO_BLK_F_IE feature is negotiated, the device MUST set
> +\field{key_types} in \field{enc_characteristics} to have at least one of
> +VIRTIO_BLK_CRYPTO_KEY_TYPE_RAW or VIRTIO_BLK_CRYPTO_KEY_TYPE_HW_WRAPPED
> +set, and MUST NOT set any bit in \field{key_types} other than
> +VIRTIO_BLK_CRYPTO_KEY_TYPE_RAW and VIRTIO_BLK_CRYPTO_KEY_TYPE_HW_WRAPPED.
> +The device MUST initialize padding bytes \field{unused3} to 0.
> +
> +The device MUST NOT set \field{max_dun_bytes} in \field{enc_characteristics}
> +to 0 or to a value greater than 8, since \field{dun} of
> +\field{virtio_blk_crypto_msg} is a fixed 8-byte field.
> +
>  \subsubsection{Legacy Interface: Device Initialization}\label{sec:Device Types / Block Device / Device Initialization / Legacy Interface: Device Initialization}
>  
>  Because legacy devices do not have FEATURES_OK, transitional devices
> @@ -478,8 +570,8 @@ \subsection{Device Operation}\label{sec:Device Types / Block Device / Device Ope
>  value is the bit index in the \field{flags} bitfield):
>  
>  \begin{description}
> -\item[VIRTIO_BLK_REQ_FLAG_OUT_FUA (0) for VIRTIO_BLK_T_OUT requests] Force Unit
> -    Access (FUA) flag.
> +\item[VIRTIO_BLK_REQ_FLAG_OUT_FUA (0) for VIRTIO_BLK_T_OUT and
> +    VIRTIO_BLK_T_CRYPTO_OUT requests] Force Unit Access (FUA) flag.
>  \end{description}
>  
>  The \field{sector} number indicates the offset (multiplied by 512) where
> @@ -886,6 +978,108 @@ \subsection{Device Operation}\label{sec:Device Types / Block Device / Device Ope
>  operation by setting the VIRTIO_BLK_S_ZONE_INVALID_CMD value in
>  \field{status} of \field{virtio_blk_req} structure.
>  
> +The following requirements only apply if the VIRTIO_BLK_F_IE feature is
> +negotiated.
> +
> +In addition to the request types defined for devices without inline
> +encryption support, the type of the request can be an inline-encrypted read
> +(VIRTIO_BLK_T_CRYPTO_IN), an inline-encrypted write (VIRTIO_BLK_T_CRYPTO_OUT)
> +or a get crypto modes command (VIRTIO_BLK_T_GET_CRYPTO_MODES).
> +
> +\begin{lstlisting}
> +#define VIRTIO_BLK_T_CRYPTO_OUT        27
> +#define VIRTIO_BLK_T_CRYPTO_IN         28
> +#define VIRTIO_BLK_T_GET_CRYPTO_MODES  30
> +\end{lstlisting}
> +
> +VIRTIO_BLK_T_CRYPTO_IN and VIRTIO_BLK_T_CRYPTO_OUT requests behave the same
> +as VIRTIO_BLK_T_IN and VIRTIO_BLK_T_OUT requests respectively, except that
> +the data in \field{data} is decrypted (for VIRTIO_BLK_T_CRYPTO_IN) or is to
> +be encrypted (for VIRTIO_BLK_T_CRYPTO_OUT) by the inline crypto engine in
> +the device backend storage using the key already provisioned in the key
> +slot identified by the request, combined with the request's Data Unit
> +Number (DUN). For this reason, the VIRTIO_BLK_T_CRYPTO_IN and
> +VIRTIO_BLK_T_CRYPTO_OUT requests have the layout that is extended to have
> +the \field{crypto_msg} field to carry this information:
> +
> +\begin{lstlisting}
> +struct virtio_blk_req_crypto {
> +        le32 type;
> +        le32 flags;
> +        le64 sector;
> +        struct virtio_blk_crypto_msg crypto_msg;
> +        u8 data[];
> +        u8 status;
> +};
> +\end{lstlisting}
> +
> +\field{crypto_msg} has the following structure:
> +
> +\begin{lstlisting}
> +struct virtio_blk_crypto_msg {
> +        le32 slot;
> +        le32 data_unit_size_bits;
> +        le64 dun;
> +};
> +\end{lstlisting}
> +
> +\field{slot} is the virtual key slot index, in the range from 0 to
> +\field{max_slots} - 1 of \field{enc_characteristics}. The device maps this
> +virtual key slot index to a physical key slot in the inline crypto engine of
> +the device backend storage.
> +\field{data_unit_size_bits} is $log_2$ of the data unit size in bytes,
> +used for calculating DUNs for sub-requests if the request is split.
> +\field{dun} is the Data Unit Number, that is, the initial value that the
> +inline crypto engine increments by one for each successive data unit of
> +the size specified by \field{data_unit_size_bits}, while encrypting or
> +decrypting the data of the request.
> +
> +VIRTIO_BLK_T_GET_CRYPTO_MODES is a read request that returns the data unit
> +sizes with which each of the device's crypto modes can be used. The
> +response consists of a header followed by zero or more \field{le32}
> +bitmask elements, indexed by crypto mode number:
> +
> +\begin{lstlisting}
> +struct virtio_blk_crypto_modes {
> +        le32   nr_modes;
> +        u8     reserved[4];
> +        le32   modes[];
> +};
> +\end{lstlisting}
> +
> +The device sets \field{nr_modes} in the response header to the number of
> +fully transferred \field{modes} elements in the data buffer. \field{modes[N]},
> +for crypto mode number N, is a bitmask indicating the data unit sizes with
> +which crypto mode N can be used by the device: the i'th bit of
> +\field{modes[N]} is set if crypto mode N can be used with a data unit size
> +of $(1 << i)$ bytes. A value of 0 for a \field{modes} element indicates
> +that the device does not support the corresponding crypto mode at all.
> +Crypto mode number 0 is reserved; \field{modes[0]} is always set to 0 by
> +the device.
> +
> +Crypto mode numbers are assigned by this specification, independently of
> +any operating system's internal representation of crypto algorithms, so
> +that support for additional crypto modes can be added in future revisions
> +of this specification without changing the meaning of previously assigned
> +numbers:
> +
> +\begin{lstlisting}
> +#define VIRTIO_BLK_CRYPTO_MODE_AES_256_XTS        1
> +#define VIRTIO_BLK_CRYPTO_MODE_AES_128_CBC_ESSIV  2
> +#define VIRTIO_BLK_CRYPTO_MODE_ADIANTUM           3
> +#define VIRTIO_BLK_CRYPTO_MODE_SM4_XTS            4
> +\end{lstlisting}
> +
> +A driver or device implementation MAY support only a subset of these
> +crypto modes. Crypto mode numbers already assigned by this or an earlier
> +version of this specification are never reused for a different crypto
> +mode; additional crypto modes are assigned new numbers, greater than the
> +highest number defined by the version of this specification the
> +implementation supports.
> +
> +VIRTIO_BLK_T_CRYPTO_IN and VIRTIO_BLK_T_GET_CRYPTO_MODES requests are reads,
> +and VIRTIO_BLK_T_CRYPTO_OUT requests are writes.
> +
>  \drivernormative{\subsubsection}{Device Operation}{Device Types / Block Device / Device Operation}
>  
>  The driver SHOULD check if the content of the \field{capacity} field has
> @@ -904,8 +1098,8 @@ \subsection{Device Operation}\label{sec:Device Types / Block Device / Device Ope
>  A driver MUST set \field{sector} to 0 for a VIRTIO_BLK_T_FLUSH request.
>  A driver SHOULD NOT include any data in a VIRTIO_BLK_T_FLUSH request.
>  
> -The length of \field{data} MUST be a multiple of 512 bytes for VIRTIO_BLK_T_IN
> -and VIRTIO_BLK_T_OUT requests.
> +The length of \field{data} MUST be a multiple of 512 bytes for VIRTIO_BLK_T_IN,
> +VIRTIO_BLK_T_OUT, VIRTIO_BLK_T_CRYPTO_IN and VIRTIO_BLK_T_CRYPTO_OUT requests.
>  
>  The length of \field{data} MUST be a multiple of the size of struct
>  virtio_blk_discard_write_zeroes for VIRTIO_BLK_T_DISCARD,
> @@ -984,6 +1178,42 @@ \subsection{Device Operation}\label{sec:Device Types / Block Device / Device Ope
>  
>  \end{enumerate}
>  
> +The following requirements only apply if the VIRTIO_BLK_F_IE feature is
> +negotiated.
> +
> +A driver MUST NOT submit a VIRTIO_BLK_T_CRYPTO_IN or VIRTIO_BLK_T_CRYPTO_OUT
> +request with a \field{slot} value that is not less than \field{max_slots} of
> +\field{enc_characteristics}, or that identifies a key slot into which no key
> +has been provisioned.
> +
> +A driver MUST set \field{data_unit_size_bits} of a VIRTIO_BLK_T_CRYPTO_IN or
> +VIRTIO_BLK_T_CRYPTO_OUT request's \field{crypto_msg} to $log_2$ of the data
> +unit size in bytes associated with the key provisioned in the virtual key
> +slot identified by \field{slot}. Since data unit sizes are reported by
> +VIRTIO_BLK_T_GET_CRYPTO_MODES as a bitmask of \field{le32} elements, a
> +driver MUST NOT set \field{data_unit_size_bits} to a value greater than 31.
> +
> +A driver MUST NOT submit a VIRTIO_BLK_T_CRYPTO_IN or VIRTIO_BLK_T_CRYPTO_OUT
> +request with a zero length \field{data}.
> +
> +A driver MUST NOT submit a VIRTIO_BLK_T_CRYPTO_IN or VIRTIO_BLK_T_CRYPTO_OUT
> +request unless \field{sector}, multiplied by 512, and the length of
> +\field{data}, are both a multiple of $(1 << \field{data_unit_size_bits})$
> +bytes.
> +
> +A driver MUST NOT submit a VIRTIO_BLK_T_CRYPTO_IN or VIRTIO_BLK_T_CRYPTO_OUT
> +request if \field{dun} + $N$ - 1 is not representable in
> +\field{max_dun_bytes} bytes, where $N$ is the number of data units of
> +$2^{\field{data_unit_size_bits}}$ bytes in \field{data}.
> +
> +A driver MUST treat any crypto mode number that is not less than
> +\field{nr_modes} of a VIRTIO_BLK_T_GET_CRYPTO_MODES response as unsupported
> +by the device.
> +
> +A driver MUST provide a \field{data} buffer of at least
> +sizeof(struct virtio_blk_crypto_modes) (8) bytes for a
> +VIRTIO_BLK_T_GET_CRYPTO_MODES request.
> +
>  \devicenormative{\subsubsection}{Device Operation}{Device Types / Block Device / Device Operation}
>  
>  The device MAY change the content of the \field{capacity} field during
> @@ -1030,7 +1260,8 @@ \subsection{Device Operation}\label{sec:Device Types / Block Device / Device Ope
>  
>  \item\label{item:flush3} the VIRTIO_BLK_F_REQ_FLAGS_OUT_FUA feature was
>    negotiated and the VIRTIO_BLK_REQ_FLAG_OUT_FUA bit in \field{flags} was set in
> -  the write request (regardless of whether the VIRTIO_BLK_F_FLUSH or
> +  the write request (VIRTIO_BLK_T_OUT or VIRTIO_BLK_T_CRYPTO_OUT, regardless of
> +  whether the VIRTIO_BLK_F_FLUSH or
>    VIRTIO_BLK_F_CONFIG_WCE features were negotiated, and regardless of the
>    current cache mode as expressed by the value of the \field{writeback} field in
>    configuration space).
> @@ -1225,6 +1456,60 @@ \subsection{Device Operation}\label{sec:Device Types / Block Device / Device Ope
>  handles VIRTIO_BLK_T_ZONE_RESET request for the zone range specified in the
>  VIRTIO_BLK_T_SECURE_ERASE request.
>  
> +The following requirements only apply if the VIRTIO_BLK_F_IE feature is
> +negotiated.
> +
> +If a VIRTIO_BLK_T_CRYPTO_IN or VIRTIO_BLK_T_CRYPTO_OUT request:
> +\begin{itemize}
> +\item specifies a \field{slot} value that is not less than \field{max_slots},
> +    or that identifies a key slot into which no key has been provisioned,
> +
> +\item specifies a \field{data_unit_size_bits} value greater than 31, or
> +    that does not match $log_2$ of the data unit size in bytes associated
> +    with the key provisioned in the virtual key slot identified by the
> +    \field{slot},
> +
> +\item specifies a zero length \field{data},
> +
> +\item specifies a \field{sector}, multiplied by 512, or a length of
> +    \field{data}, that is not a multiple of $(1 << \field{data_unit_size_bits})$
> +    bytes, or
> +
> +\item specifies a \field{dun} such that \field{dun} + $N$ - 1 is not
> +    representable in \field{max_dun_bytes} bytes, where $N$ is the number
> +    of data units of $2^{\field{data_unit_size_bits}}$ bytes in
> +    \field{data},
> +\end{itemize}
> +then the device MUST set the \field{status} byte to VIRTIO_BLK_S_UNSUPP and
> +MUST NOT read or write any data.
> +
> +If a VIRTIO_BLK_T_GET_CRYPTO_MODES request's \field{data} buffer is smaller
> +than sizeof(struct virtio_blk_crypto_modes) (8) bytes, the device MUST set
> +the \field{status} byte to VIRTIO_BLK_S_UNSUPP and MUST NOT write any data.
> +
> +If the driver's \field{data} buffer in a VIRTIO_BLK_T_GET_CRYPTO_MODES
> +request is not large enough to hold \field{modes} elements up to the
> +highest crypto mode number the device supports, the device MUST set
> +\field{nr_modes} to the number of complete \field{modes} elements that fit
> +in the buffer, and MUST NOT write a partial element.
> +
> +The device MUST initialize padding bytes \field{reserved} of a
> +VIRTIO_BLK_T_GET_CRYPTO_MODES response to 0.
> +
> +For a VIRTIO_BLK_T_CRYPTO_IN or VIRTIO_BLK_T_CRYPTO_OUT request, the device
> +MUST use the key provisioned in the virtual key slot identified by
> +\field{slot} of the request's \field{crypto_msg}, combined with \field{dun},
> +to decrypt the data read from, or encrypt the data written to, the device
> +backend storage. If the device backend storage splits the request into
> +sub-requests, each sub-request MUST begin at a byte offset, from the start
> +of \field{data}, that is a multiple of $(1 << \field{data_unit_size_bits})$
> +bytes, MUST have a length that is a multiple of
> +$(1 << \field{data_unit_size_bits})$ bytes, and MUST use, in place of
> +\field{dun}, the Data Unit Number
> +$\field{dun} + (\mathit{byte\_offset} / (1 << \field{data_unit_size_bits}))$,
> +where $\mathit{byte\_offset}$ is that sub-request's starting byte offset
> +from the start of \field{data}.
> +
>  \subsubsection{Legacy Interface: Device Operation}\label{sec:Device Types / Block Device / Device Operation / Legacy Interface: Device Operation}
>  When using the legacy interface, transitional devices and drivers
>  MUST format the fields in struct virtio_blk_req
> -- 
> 2.34.1
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

  reply	other threads:[~2026-08-17 17:16 UTC|newest]

Thread overview: 16+ 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 [this message]
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-19 21:18 ` Stefan Hajnoczi
  -- 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=20260817171650.GC143460@fedora \
    --to=stefanha@redhat.com \
    --cc=ebiggers@kernel.org \
    --cc=linlin.zhang@oss.qualcomm.com \
    --cc=neeraj.soni@oss.qualcomm.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