On Mon, 2026-06-08 at 12:21 -0400, Mimi Zohar wrote:
> On Fri, 2026-06-05 at 19:22 +0200, Roberto Sassu wrote:
> > From: Roberto Sassu <[email protected]>
> > 
> > Introduction
> > ============
> > 
> > The IMA measurements list is currently stored in the kernel memory.
> > Memory occupation grows linearly with the number of records, and can
> > become a problem especially in environments with reduced resources.
> > 
> > While there is an advantage in keeping the IMA measurements list in
> > kernel memory, so that it is always available for reading from the
> > securityfs interfaces, storing it elsewhere would make it possible to
> > free precious memory for other kernel usage.
> > 
> > The IMA measurements list needs to be retained and safely stored for new
> > attestation servers to validate it. Assuming the IMA measurements list
> > is properly saved, storing it outside the kernel does not introduce
> > security issues, since its integrity is anyway protected by the TPM.
> > 
> > Hence, the new IMA staging mechanism is introduced to export IMA
> > measurements to user space and delete them from kernel space.
> > 
> > Staging consists in atomically moving the current measurements list to a
> > temporary list, so that measurements can be deleted afterwards. The
> > staging operation locks the hot path (racing with addition of new
> > measurements) for a very short time, only for swapping the list
> > pointers. Deletion of the measurements instead is done locklessly, away
> > from the hot path.
> > 
> > There are two flavors of the staging mechanism. In the staging with
> > prompt, all current measurements are staged, read and deleted upon
> > confirmation. In the staging and deleting flavor, N measurements are
> > staged from the beginning of the current measurements list and
> > immediately deleted without confirmation.
> > 
> > 
> > Usage
> > =====
> > 
> > The IMA staging mechanism can be enabled from the kernel configuration
> > with the CONFIG_IMA_STAGING option. This option prevents inadvertently
> > removing the IMA measurement list on systems which do not properly save
> > it.
> > 
> > If the option is enabled, IMA duplicates the current securityfs
> > measurements interfaces (both binary and ASCII), by adding the _staged
> > file suffix. Both the original and the staging interfaces gain the write
> > permission for the root user and group, but require the process to have
> > CAP_SYS_ADMIN set.
> > 
> > The staging mechanism supports two flavors.
> > 
> > Staging with prompt
> > ~~~~~~~~~~~~~~~~~~~
> > 
> > The current measurement list is moved to a temporary staging area,
> > allowing it to be saved to external storage, before being deleted upon
> > confirmation.
> > 
> > This staging process is achieved with the following steps.
> > 
> >   1.  echo A > <_staged interface>: the user requests IMA to stage the
> >       entire measurements list;
> >   2.  cat <_staged interface>: the user reads the staged measurements;
> >   3.  echo D > <_staged interface>: the user requests IMA to delete
> >       staged measurements.
> > 
> > Staging and deleting
> > ~~~~~~~~~~~~~~~~~~~~
> > 
> > N measurements are staged to a temporary staging area, and immediately
> > deleted without further confirmation.
> > 
> > This staging process is achieved with the following steps.
> > 
> >   1.  cat <original interface>: the user reads the current measurements
> >       list and determines what the value N for staging should be;
> >   2.  echo N > <original interface>: the user requests IMA to delete N
> >       measurements from the current measurements list.
> > 
> > 
> > Management of Staged Measurements
> > =================================
> > 
> > Since with the staging mechanism measurement records are removed from
> > the kernel, the staged measurements need to be saved in a storage and
> > concatenated together, so that they can be presented during remote
> > attestation as if staging was never done. This task can be accomplished
> > by a remote attestation agent modified to support staging, or a system
> > service.
> > 
> > 
> > Patch set content
> > =================
> > 
> > Patches 1-8 are preparatory patches to quickly replace the hash table,
> > maintain separate counters for the different measurements list types,
> > mediate access to the measurements list interface, and simplify the staging
> > patches.
> > 
> > Patch 9 introduces the staging with prompt flavor. Patch 10 makes it
> > possible to flush the hash table when deleting all the staged measurements.
> > Patch 11 introduces the staging and deleting flavor. Patch 12 adds the
> > documentation of the staging mechanism.
> > 
> > 
> > Changelog
> > =========
> > 
> > v6:
> >  - Make ima_extend_list_mutex as static since it is not needed anymore by
> >    ima_dump_measurement_list() (suggested by Mimi)
> >  - Export ima_flush_htable in patch 11 instead of 10 (suggested by Mimi)
> >  - Add clarification in the documentation regarding a proactive remote
> >    attestation agent, and storing all the measurements in the storage
> >    (suggested by Mimi)
> 
> Roberto, thank you for making these and all the other changes.  The patch set 
> is
> now queued in next-integrity.

Perfect, thank you!

Roberto


Reply via email to