[PATCH v3 1/2] balloon: add VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED
"Michael S. Tsirkin" <[email protected]> Tue, 5 May 2026 12:08:03 -0400
| Newsgroups | dev.linux.lists.virtio-comment |
|---|---|
| Message-ID | <20d9e420296c3c27114d42fdd87cb96c54632ab8.1777995753.git.mst@redhat.com> |
Add VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED (bit 6): the device initializes reported pages and signals success via the used length of each reporting_vq element. Add Security Considerations section covering information leakage, data integrity, and denial of service. Fixes: https://github.com/oasis-tcs/virtio-spec/issues/244 Signed-off-by: Michael S. Tsirkin <[email protected]> --- device-types/balloon/description.tex | 85 +++++++++++++++++++++++++++- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/device-types/balloon/description.tex b/device-types/balloon/description.tex index a1d9603..ce08a4a 100644 --- a/device-types/balloon/description.tex +++ b/device-types/balloon/description.tex @@ -49,6 +49,18 @@ \subsection{Feature bits}\label{sec:Device Types / Memory Balloon Device / Featu \item[ VIRTIO_BALLOON_F_PAGE_REPORTING(5) ] The device has support for free page reporting. A virtqueue for reporting free guest memory is present. +\item[ VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED(6) ] The device initializes + reported pages. + +\end{description} + +\subsubsection{Feature bit requirements}\label{sec:Device Types / Memory Balloon Device / Feature bits / Feature bit requirements} + +Some balloon feature bits require other balloon feature bits +(see \ref{drivernormative:Basic Facilities of a Virtio Device / Feature Bits}): + +\begin{description} +\item[VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED] Requires VIRTIO_BALLOON_F_PAGE_REPORTING. \end{description} \drivernormative{\subsubsection}{Feature bits}{Device Types / Memory Balloon Device / Feature bits} @@ -61,7 +73,8 @@ \subsection{Feature bits}\label{sec:Device Types / Memory Balloon Device / Featu If the driver is expecting the pages to retain some initialized value, it MUST NOT accept VIRTIO_BALLOON_F_PAGE_REPORTING unless it also -negotiates VIRTIO_BALLOON_F_PAGE_POISON. +negotiates VIRTIO_BALLOON_F_PAGE_POISON or +VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED. \devicenormative{\subsubsection}{Feature bits}{Device Types / Memory Balloon Device / Feature bits} If the device offers the VIRTIO_BALLOON_F_MUST_TELL_HOST feature @@ -625,10 +638,78 @@ \subsubsection{Free Page Reporting}\label{sec:Device Types / Memory Balloon Devi Normative statements in this section apply if the VIRTIO_BALLOON_F_PAGE_REPORTING feature has been negotiated. -If the VIRTIO_BALLOON_F_PAGE_POISON feature has not been negotiated, the +If neither the VIRTIO_BALLOON_F_PAGE_POISON nor +VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED feature has been negotiated, the device MAY modify the contents of any page supplied in a report request before acknowledging that request by using the reporting_vq descriptor. If the VIRTIO_BALLOON_F_PAGE_POISON feature has been negotiated, the device MUST NOT modify the the content of a reported page to a value other than \field{poison_val}. + +\subsubsection{Device Initialized Reported Pages}\label{sec:Device Types / Memory Balloon Device / Device Operation / Device Initialized Reported Pages} + +When VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED is negotiated, the device +initializes reported pages by writing into each byte of the page. + +\drivernormative{\paragraph}{Device Initialized Reported Pages}{Device Types / Memory Balloon Device / Device Operation / Device Initialized Reported Pages} + +Normative statements in this section apply if the +VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED feature has been negotiated. + +The driver MUST NOT treat a reported page as initialized unless +the used length covers it. + +\devicenormative{\paragraph}{Device Initialized Reported Pages}{Device Types / Memory Balloon Device / Device Operation / Device Initialized Reported Pages} + +Normative statements in this section apply if the +VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED feature has been negotiated. + +If VIRTIO_BALLOON_F_PAGE_POISON is also negotiated, the device +MUST fill each initialized page with \field{poison_val}. + +If VIRTIO_BALLOON_F_PAGE_POISON is not negotiated, the device +MUST fill each initialized page with zeros. + +\subsection{Security Considerations}\label{sec:Device Types / Memory Balloon Device / Security Considerations} + +In environments where the device is not trusted, such as +confidential computing, the balloon device presents several +security concerns. + +\subsubsection{Information Leakage}\label{sec:Device Types / Memory Balloon Device / Security Considerations / Information Leakage} + +When the driver inflates the balloon, the addresses of the pages +are communicated to the device. On some systems, the page contents +themselves are also accessible to the device. These pages may +contain sensitive data from previous use by the guest. In systems +where the device is untrusted, the driver should sanitize pages +before inflating them. + +Free page hinting and free page reporting similarly expose +information about which pages are free, and in the case of +reporting, may make page contents accessible to the device. Memory +statistics reporting exposes guest memory usage patterns. + +\subsubsection{Data Integrity}\label{sec:Device Types / Memory Balloon Device / Security Considerations / Data Integrity} + +When the device is untrusted, the driver cannot rely on the device +to correctly initialize pages. An untrusted device can report a +non-zero used length for VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED +without actually initializing the corresponding pages. If the +driver treats such pages as initialized (e.g., marking them as +zeroed), this could lead to information leakage between guest +processes or other security violations. + +Drivers operating in environments with untrusted devices are +expected to avoid negotiating +VIRTIO_BALLOON_F_DEVICE_INIT_REPORTED, and to initialize +all pages themselves. + +\subsubsection{Denial of Service}\label{sec:Device Types / Memory Balloon Device / Security Considerations / Denial of Service} + +A malicious device could set \field{num_pages} to an +unreasonably large value, causing the driver to surrender most +of the guest's memory. Drivers should apply reasonable limits +and not inflate the balloon to the point where the guest +becomes unable to function. -- MST