On Fri, 2023-10-27 at 10:35 +0200, Roberto Sassu wrote: > From: Roberto Sassu <roberto.sassu@xxxxxxxxxx> > > IMA and EVM are not effectively LSMs, especially due to the fact that in > the past they could not provide a security blob while there is another LSM > active. > > That changed in the recent years, the LSM stacking feature now makes it > possible to stack together multiple LSMs, and allows them to provide a > security blob for most kernel objects. While the LSM stacking feature has > some limitations being worked out, it is already suitable to make IMA and > EVM as LSMs. > > In short, while this patch set is big, it does not make any functional > change to IMA and EVM. IMA and EVM functions are called by the LSM > infrastructure in the same places as before (except ima_post_path_mknod()), > rather being hardcoded calls, and the inode metadata pointer is directly > stored in the inode security blob rather than in a separate rbtree. > > To avoid functional changes, it was necessary to keep the 'integrity' LSM > in addition to the newly introduced 'ima' and 'evm' LSMs, despite there is > no LSM ID assigned to it. There are two reasons: first, IMA and EVM still > share the same inode metadata, and thus cannot directly reserve space in > the security blob for it; second, someone needs to initialize 'ima' and > 'evm' exactly in this order, as the LSM infrastructure cannot guarantee > that. > > The patch set is organized as follows. > > Patches 1-9 make IMA and EVM functions suitable to be registered to the LSM > infrastructure, by aligning function parameters. > > Patches 10-18 add new LSM hooks in the same places where IMA and EVM > functions are called, if there is no LSM hook already. > > Patches 19-22 do the bulk of the work, introduce the new LSMs 'ima' and > 'evm', and move hardcoded calls to IMA, EVM and integrity functions to > those LSMs. In addition, they reserve one slot for the 'evm' LSM to supply > an xattr with the inode_init_security hook. > > Finally, patch 23 removes the rbtree used to bind integrity metadata to the > inodes, and instead reserves a space in the inode security blob to store > the pointer to that metadata. This also brings performance improvements due > to retrieving metadata in constant time, as opposed to logarithmic. > > The patch set applies on top of lsm/next-queue, commit 0310640b00d2 ("lsm: > don't yet account for IMA in LSM_CONFIG_COUNT calculation"), plus commits > in linux-integrity/next-integrity-testing up to bc4532e9cd3b ("ima: detect > changes to the backing overlay file"). Thanks, Roberto! The patch set looks really good. I just sent a few very minor comments. Mimi