From nobody Mon Jun 8 23:56:53 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id EC4981AAE28; Mon, 25 May 2026 07:54:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779695656; cv=none; b=QFnY4mml45xGhzro2oqS6jCTtd2Fc5d/tn0PyvNKwU5isYgC3SmQb+Jqcrkb/aY+hSM6hYNDOEme3q5GI40Q7a4kWFJ4vabNjE4tFHteBjxGuXwEnCm9k/8hDelwmiG0+6q/qJIX3LDzVcWT1tImJrPqy7vLGgydKWDJy9DX2Q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779695656; c=relaxed/simple; bh=GLjR0pOZvKp6t4lRJ9X/m4e9jLFN4QEWM1Bm7UejT0s=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Qi3VC1UFoODUbhSRx9YBsDU2Ir6n2d3+jNRq8/YsMFOSYo85MYqq/QqSKd7e7Kc5Wr3Y6vwcv9r5r+ccjQVR5hgSq/9xW+23KAdg1ceT4G5x9pehRKiGLN03lIZfrRRFfMeRBhhQ+5G3EUSC+I4bbUo5Rnn+7ocqwLOoPLoWfgU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=oXUUoUze; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="oXUUoUze" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5BEBC2696; Mon, 25 May 2026 00:54:09 -0700 (PDT) Received: from e129823.cambridge.arm.com (e129823.arm.com [10.1.197.6]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 49A233F7D8; Mon, 25 May 2026 00:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1779695654; bh=GLjR0pOZvKp6t4lRJ9X/m4e9jLFN4QEWM1Bm7UejT0s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oXUUoUze3gRaoy5rs1I9qYbVpyax3KUTAbJsTV4KhfqThaacdhq5QUSnkOSCWIaHr WzWC3kQGmbn0DNhWmsmUfOroeCnim69N1eWFGKzp8qZ2CvmvL4bXB+xHVJBdsNSGFC 2c/lVO06jz8HBaQVscj1aH0ONrl18lA5wC2aPPVI= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org Cc: paul@paul-moore.com, zohar@linux.ibm.com, roberto.sassu@huaweicloud.com, noodles@earth.li, jarkko@kernel.org, sudeep.holla@kernel.org, jmorris@namei.org, serge@hallyn.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, jgg@ziepe.ca, Yeoreum Yun Subject: [PATCH v4 1/3] security: lsm: Allow LSMs to register for late_initcall_sync init Date: Mon, 25 May 2026 08:54:02 +0100 Message-Id: <20260525075404.3480282-2-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260525075404.3480282-1-yeoreum.yun@arm.com> References: <20260525075404.3480282-1-yeoreum.yun@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" There are situations where LSMs have dependencies that might mean they want to be initialised later in the boot process, to ensure those dependencies are available. In particular there are some TPM setups (Arm FF-A devices, SPI attached TPMs) required by IMA which are not guaranteed to be initialised for regular initcall_late. Add an initcall_late_sync option that can be used in these situations. Signed-off-by: Yeoreum Yun --- include/linux/lsm_hooks.h | 2 ++ security/lsm_init.c | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index b4f8cad53ddb..c4488c4a6d8a 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -167,6 +167,7 @@ enum lsm_order { * @initcall_fs: LSM callback for fs_initcall setup, optional * @initcall_device: LSM callback for device_initcall() setup, optional * @initcall_late: LSM callback for late_initcall() setup, optional + * @initcall_late_sync: LSM callback for late_initcall_sync() setup, optio= nal */ struct lsm_info { const struct lsm_id *id; @@ -182,6 +183,7 @@ struct lsm_info { int (*initcall_fs)(void); int (*initcall_device)(void); int (*initcall_late)(void); + int (*initcall_late_sync)(void); }; =20 #define DEFINE_LSM(lsm) \ diff --git a/security/lsm_init.c b/security/lsm_init.c index 7c0fd17f1601..a1ad641811de 100644 --- a/security/lsm_init.c +++ b/security/lsm_init.c @@ -556,13 +556,22 @@ device_initcall(security_initcall_device); * security_initcall_late - Run the LSM late initcalls */ static int __init security_initcall_late(void) +{ + return lsm_initcall(late); +} +late_initcall(security_initcall_late); + +/** + * security_initcall_late_sync - Run the LSM late initcalls sync + */ +static int __init security_initcall_late_sync(void) { int rc; =20 - rc =3D lsm_initcall(late); + rc =3D lsm_initcall(late_sync); lsm_pr_dbg("all enabled LSMs fully activated\n"); call_blocking_lsm_notifier(LSM_STARTED_ALL, NULL); =20 return rc; } -late_initcall(security_initcall_late); +late_initcall_sync(security_initcall_late_sync); --=20 LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} From nobody Mon Jun 8 23:56:53 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 7FDC93D5C2C; Mon, 25 May 2026 07:54:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779695659; cv=none; b=KqHyV9QOuqVW7hkz+B7VWq8qv9Hw94jgH6XkUX0ijyUol2EZGNqtlx5KOZ904hs3LT5p4ZyPFLJlqoC00dP7nqPCKD2zPvBHU4JZPZ6SmdFyXBGkd6SnCZSfAgvhdNTVk9AA9USZMayEdD/GR9WYlwudy4c5pAvd40zJPQpE5Pk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779695659; c=relaxed/simple; bh=0hKV6HfJq9R0Q0y5b8EP020wcoHchplmez6CdMHtDBU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=fWzCqzqHcKW7Wx1frXxnq9Dx5nWBmBaswc3y+xi+cBw8r8D3d3B3eP9CSybva+G223HP6zKT28l0PZgZTeVBoArz930cmjvU46j7dHBWDi6Mp3bGV/XUIPjO2rwjGV0pnl4ZYHtJ2bFZEVChZTRj/m9z2Sa7qT8mpaI1JI+WlPU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=o0PnvAO3; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="o0PnvAO3" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C8EB5354A; Mon, 25 May 2026 00:54:11 -0700 (PDT) Received: from e129823.cambridge.arm.com (e129823.arm.com [10.1.197.6]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B91663F7D8; Mon, 25 May 2026 00:54:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1779695656; bh=0hKV6HfJq9R0Q0y5b8EP020wcoHchplmez6CdMHtDBU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o0PnvAO3O0Gvlo2Xs1wqzTZztethIO3WHXzOai8z+84PREaKIEBm79MEkC/fnV0j7 14rgQAvyNERCWfrLTG3L3e/M4PENQJZQaCH0zGoAqCNIOaU8ff4BvYV/prujVLjzqN 4/IQrKWpIsdifDZZeaOA9LPhBXRDRvcxLCWWRuXA= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org Cc: paul@paul-moore.com, zohar@linux.ibm.com, roberto.sassu@huaweicloud.com, noodles@earth.li, jarkko@kernel.org, sudeep.holla@kernel.org, jmorris@namei.org, serge@hallyn.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, jgg@ziepe.ca, Yeoreum Yun Subject: [PATCH v4 2/3] security: ima: introduce IMA_INIT_LATE_SYNC option Date: Mon, 25 May 2026 08:54:03 +0100 Message-Id: <20260525075404.3480282-3-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260525075404.3480282-1-yeoreum.yun@arm.com> References: <20260525075404.3480282-1-yeoreum.yun@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable To generate the boot_aggregate log in the IMA subsystem with TPM PCR values, the TPM driver must be built as built-in and must be probed before the IMA subsystem is initialized. However, when the TPM device operates over the FF-A protocol using the CRB interface, probing fails and returns -EPROBE_DEFER if the tpm_crb_ffa device =E2=80=94 an FF-A device that provides the communica= tion interface to the tpm_crb driver =E2=80=94 has not yet been probed. To ensure the TPM device operating over the FF-A protocol with the CRB interface is probed before IMA initialization, the following conditions must be met: 1. The corresponding ffa_device must be registered, which is done via ffa_init(). 2. The tpm_crb_driver must successfully probe this device via tpm_crb_ffa_init(). 3. The tpm_crb driver using CRB over FF-A can then be probed successfully. (See crb_acpi_add() and tpm_crb_ffa_init() for reference.) Unfortunately, ffa_init(), tpm_crb_ffa_init(), and crb_acpi_driver_init() a= re all registered with device_initcall, which means crb_acpi_driver_init() may be invoked before ffa_init() and tpm_crb_ffa_init() are completed. When this occurs, probing the TPM device is deferred. However, the deferred probe can happen after the IMA subsystem has already been initialized, since IMA initialization is performed during late_initcall, and deferred_probe_initcall() is performed at the same level. And the similar situation is reported on TPM devices attached on SPI bus[0]. To resolve this, introduce IMA_INIT_LATE_SYNC option to initialise IMA at late_inicall_sync so that IMA is initialized with the TPM device probed deffered. When this option is enabled, modules that access files in the initramfs through usermode helper calls such as request_module() during initcall must not be built-in. Otherwise, IMA may miss measuring those files since they're the file accesses before the initialisation of IMA [1]. Link: https://lore.kernel.org/all/aYXEepLhUouN5f99@earth.li/ [0] Link: https://lore.kernel.org/all/2b3782398cc17ce9d355490a0c42ebce9120a9ae.= camel@linux.ibm.com/ [1] Suggested-by: Mimi Zohar Signed-off-by: Yeoreum Yun --- security/integrity/ima/Kconfig | 10 ++++++++++ security/integrity/ima/ima_main.c | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/security/integrity/ima/Kconfig b/security/integrity/ima/Kconfig index 862fbee2b174..75f71401fba3 100644 --- a/security/integrity/ima/Kconfig +++ b/security/integrity/ima/Kconfig @@ -332,4 +332,14 @@ config IMA_KEXEC_EXTRA_MEMORY_KB If set to the default value of 0, an extra half page of memory for those additional measurements will be allocated. =20 +config IMA_INIT_LATE_SYNC + bool "Initialise IMA at late_initcall_sync" + default n + help + This option initialises IMA at late_initcall_sync for platforms + where TPM device probing is deferred. + When this option is enabled, modules that access files in the + initramfs through usermode helper calls such as request_module() + during initcall must not be built-in. Otherwise, IMA may miss + file measurements for them. endif diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima= _main.c index 5cea53fc36df..1cfae4b83dc5 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -1337,5 +1337,9 @@ DEFINE_LSM(ima) =3D { .order =3D LSM_ORDER_LAST, .blobs =3D &ima_blob_sizes, /* Start IMA after the TPM is available */ +#ifndef CONFIG_IMA_INIT_LATE_SYNC .initcall_late =3D init_ima, +#else + .initcall_late_sync =3D init_ima, +#endif }; --=20 LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} From nobody Mon Jun 8 23:56:53 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E19BD3D5258; Mon, 25 May 2026 07:54:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779695661; cv=none; b=nmmBGgmP/HqaIwGv7FkFAmfo/EIL1rhMFxCH5dwg4kxdg/7GF+mrf2iyERts23NSgLWmZb/6qiYxDabDwvADd+qrXbAcf1rJgmMTUG6xiQ4mSW8md1mJYc2m93jA/fI5LJGlnkDGP+UxyfZK4pUxDOsoCaNqEp/fQ6pH4Wj5d9M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779695661; c=relaxed/simple; bh=rBODykKI1i7KPE4SMWeAh+EbtRDRsTpf+aHtEHim1nc=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GxOR+qepRcdQZip+GwF8cBwhgLjFG2uEbxxWLKtqAngG7Qx7WfFZxwuEjUxb05gszYi/nVnYv4yYmRuT8UpwVVV3MXF1SFRKzl1kktPjjhhABXIui7JT9dKQHzB2qjRasLcn6aj892MdVK/T3UhDgIYeBfd5GgdReWg88R0/kGE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com; spf=pass smtp.mailfrom=arm.com; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b=fTrXbm09; arc=none smtp.client-ip=217.140.110.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=arm.com header.i=@arm.com header.b="fTrXbm09" Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 43696354D; Mon, 25 May 2026 00:54:14 -0700 (PDT) Received: from e129823.cambridge.arm.com (e129823.arm.com [10.1.197.6]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 330393F7D8; Mon, 25 May 2026 00:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1779695659; bh=rBODykKI1i7KPE4SMWeAh+EbtRDRsTpf+aHtEHim1nc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fTrXbm09Jc1Z3VME96YPHpvsBIpOdwlgPTAVwcLONPWFzFqaQ6/uQdzJNy+MFpYCK gIf9GmY9hlpXrT3FmKXBLC6LgEH+Qz2rFwUDj2HnqtxDr0VDW4SSjciwPYEiQGQ+/5 /WCojZz4uuLORL4smDBmGs0ZZ1k2agy7smlbx760= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org Cc: paul@paul-moore.com, zohar@linux.ibm.com, roberto.sassu@huaweicloud.com, noodles@earth.li, jarkko@kernel.org, sudeep.holla@kernel.org, jmorris@namei.org, serge@hallyn.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, jgg@ziepe.ca, Yeoreum Yun Subject: [PATCH v4 3/3] tpm: tpm_crb_ffa: revert defered_probed when tpm_crb_ffa is built-in Date: Mon, 25 May 2026 08:54:04 +0100 Message-Id: <20260525075404.3480282-4-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260525075404.3480282-1-yeoreum.yun@arm.com> References: <20260525075404.3480282-1-yeoreum.yun@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" commit 746d9e9f62a6 ("tpm: tpm_crb_ffa: try to probe tpm_crb_ffa when it's = build_in") probe tpm_crb_ffa forcefully when it's built-in to integrate with IMA. However, IMA now provides the IMA_INIT_LATE_SYNC build option, which initialises IMA at the late_initcall_sync level, so this change is no longer required. Signed-off-by: Yeoreum Yun --- drivers/char/tpm/tpm_crb_ffa.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/drivers/char/tpm/tpm_crb_ffa.c b/drivers/char/tpm/tpm_crb_ffa.c index 99f1c1e5644b..025c4d4b17ca 100644 --- a/drivers/char/tpm/tpm_crb_ffa.c +++ b/drivers/char/tpm/tpm_crb_ffa.c @@ -177,23 +177,13 @@ static int tpm_crb_ffa_to_linux_errno(int errno) */ int tpm_crb_ffa_init(void) { - int ret =3D 0; - - if (!IS_MODULE(CONFIG_TCG_ARM_CRB_FFA)) { - ret =3D ffa_register(&tpm_crb_ffa_driver); - if (ret) { - tpm_crb_ffa =3D ERR_PTR(-ENODEV); - return ret; - } - } - if (!tpm_crb_ffa) - ret =3D -ENOENT; + return -ENOENT; =20 if (IS_ERR_VALUE(tpm_crb_ffa)) - ret =3D -ENODEV; + return -ENODEV; =20 - return ret; + return 0; } EXPORT_SYMBOL_GPL(tpm_crb_ffa_init); =20 @@ -405,9 +395,7 @@ static struct ffa_driver tpm_crb_ffa_driver =3D { .id_table =3D tpm_crb_ffa_device_id, }; =20 -#ifdef MODULE module_ffa_driver(tpm_crb_ffa_driver); -#endif =20 MODULE_AUTHOR("Arm"); MODULE_DESCRIPTION("TPM CRB FFA driver"); --=20 LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}