mirror of
https://git.yoctoproject.org/meta-security
synced 2026-05-09 17:40:32 +00:00
meta: refactor IMA/EVM sign rootfs
The current logic in ima-evm-rootfs.bbclass does not guarantee
ima_evm_sign_rootfs is the last function in IMAGE_PREPROCESS_COMMAND
by appending to it, for instance, if there are other "_append" being
used as it's the case in openembedded-core/meta/classes/image.bbclass:
| IMAGE_PREPROCESS_COMMAND_append = " ${@ 'systemd_preset_all;' \
| if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) \
| and not bb.utils.contains('IMAGE_FEATURES', 'stateless-rootfs', True,
| False, d) else ''} reproducible_final_image_task; "
and ima-evm-rootfs should be in IMAGE_CLASSES instead of in INHERIT
since that would impact all recipes but not only image recipes.
To fix the above issues, we introduce a ima_evm_sign_handler setting
IMA/EVM rootfs signing requirements/dependencies in event
bb.event.RecipePreFinalise, it checks 'ima' distro feature to decide if
IMA/EVM rootfs signing logic should be applied or not.
Also add ima-evm-keys to IMAGE_INSTALL.
Signed-off-by: Ming Liu <liu.ming50@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
This commit is contained in:
@@ -37,15 +37,6 @@ ima_evm_sign_rootfs () {
|
||||
# reasons (including a change of the signing keys) without also
|
||||
# re-running do_rootfs.
|
||||
|
||||
# Copy file(s) which must be on the device. Note that
|
||||
# evmctl uses x509_evm.der also for "ima_verify", which is probably
|
||||
# a bug (should default to x509_ima.der). Does not matter for us
|
||||
# because we use the same key for both.
|
||||
install -d ./${sysconfdir}/keys
|
||||
rm -f ./${sysconfdir}/keys/x509_evm.der
|
||||
install "${IMA_EVM_X509}" ./${sysconfdir}/keys/x509_evm.der
|
||||
ln -sf x509_evm.der ./${sysconfdir}/keys/x509_ima.der
|
||||
|
||||
# Fix /etc/fstab: it must include the "i_version" mount option for
|
||||
# those file systems where writing files is allowed, otherwise
|
||||
# these changes will not get detected at runtime.
|
||||
@@ -80,13 +71,16 @@ ima_evm_sign_rootfs () {
|
||||
}
|
||||
|
||||
# Signing must run as late as possible in the do_rootfs task.
|
||||
# IMAGE_PREPROCESS_COMMAND runs after ROOTFS_POSTPROCESS_COMMAND, so
|
||||
# append (not prepend!) to IMAGE_PREPROCESS_COMMAND, and do it with
|
||||
# _append instead of += because _append gets evaluated later. In
|
||||
# particular, we must run after prelink_image in
|
||||
# IMAGE_PREPROCESS_COMMAND, because prelinking changes executables.
|
||||
# To guarantee that, we append it to IMAGE_PREPROCESS_COMMAND in
|
||||
# RecipePreFinalise event handler, this ensures it's the last
|
||||
# function in IMAGE_PREPROCESS_COMMAND.
|
||||
python ima_evm_sign_handler () {
|
||||
if not e.data or 'ima' not in e.data.getVar('DISTRO_FEATURES').split():
|
||||
return
|
||||
|
||||
IMAGE_PREPROCESS_COMMAND_append = " ima_evm_sign_rootfs ; "
|
||||
|
||||
# evmctl must have been installed first.
|
||||
do_rootfs[depends] += "ima-evm-utils-native:do_populate_sysroot"
|
||||
e.data.appendVar('IMAGE_PREPROCESS_COMMAND', ' ima_evm_sign_rootfs; ')
|
||||
e.data.appendVar('IMAGE_INSTALL', ' ima-evm-keys')
|
||||
e.data.appendVarFlag('do_rootfs', 'depends', ' ima-evm-utils-native:do_populate_sysroot')
|
||||
}
|
||||
addhandler ima_evm_sign_handler
|
||||
ima_evm_sign_handler[eventmask] = "bb.event.RecipePreFinalise"
|
||||
|
||||
Reference in New Issue
Block a user