From nobody Sat Jun 20 08:26:25 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D494535AC07; Fri, 17 Apr 2026 17:58:08 +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=1776448691; cv=none; b=c561eqo8jxYO42Eos1YD4BE1Yyd4CgNyRJRRg2fL1dny+JqwRHB2W+1aeSUTsDAlEgL0ZUtzUl/9O930l+wr1mH2VyZFo6tNhmAU78Cg/PwpVbJ4cXjmbM2/AD7tACj1nqdsq/PSRT7/TlZ0SEiCFMoZGfIk5jjK691580kDIxs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776448691; c=relaxed/simple; bh=Xthb3ehGwSqNy98ZkV5hx2XQVIYeOUNZ+zk/mPHeVxQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=Ye9gEY0HkaGRQObw/TVgITLz9/XocOQwu+7t1BDSG0xwOhMxpCOxcEuej/i3WNXOxFX3faLQqVVMct1jzjQpGVtZRziXWpKuwigA3byLojYCen5FGl4eKq5BydaMG5l4RoVWZVqa7yEHnM8z7uwLPjeRWXH+ZbNVkx/Q9DgIe+A= 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=RzCt12xa; 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="RzCt12xa" 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 A706726BC; Fri, 17 Apr 2026 10:58:02 -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 04E383F7D8; Fri, 17 Apr 2026 10:58:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1776448688; bh=Xthb3ehGwSqNy98ZkV5hx2XQVIYeOUNZ+zk/mPHeVxQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RzCt12xaQIVpIK57/JmZuLaQSf7X8Bn2amg1WbgDOQvm6hJwOQ+GETwKwN/IvCLlP LwL/uUXAEXohJSGUhfUd3dweBChjvRK6rld0iEamfNRRB3292kPiIFdztya0QK8SJs x7KtkjQnfkuTjSXc8H0yC4Ok34Qyp4MnzUYyi3lk= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: paul@paul-moore.com, jmorris@namei.org, serge@hallyn.com, zohar@linux.ibm.com, roberto.sassu@huawei.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, peterhuewe@gmx.de, jarkko@kernel.org, jgg@ziepe.ca, sudeep.holla@kernel.org, maz@kernel.org, oupton@kernel.org, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, catalin.marinas@arm.com, will@kernel.org, Yeoreum Yun Subject: [RFC PATCH 1/4] security: ima: move ima_init into late_initcall_sync Date: Fri, 17 Apr 2026 18:57:56 +0100 Message-Id: <20260417175759.3191279-2-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260417175759.3191279-1-yeoreum.yun@arm.com> References: <20260417175759.3191279-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. To resolve this, move ima_init() into late_inicall_sync level so that let IMA not miss TPM PCR value when generating boot_aggregate log though TPM device presents in the system. Signed-off-by: Yeoreum Yun Reviewed-by: Jonathan McDowell Tested-by: Jonathan McDowell --- include/linux/lsm_hooks.h | 2 ++ security/integrity/ima/ima_main.c | 2 +- security/lsm_init.c | 13 +++++++++++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h index d48bf0ad26f4..88fe105b7f00 100644 --- a/include/linux/lsm_hooks.h +++ b/include/linux/lsm_hooks.h @@ -166,6 +166,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; @@ -181,6 +182,7 @@ struct lsm_info { int (*initcall_fs)(void); int (*initcall_device)(void); int (*initcall_late)(void); + int (*initcall_late_sync)(void); }; #define DEFINE_LSM(lsm) \ diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima= _main.c index 1d6229b156fb..ace280fa3212 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -1320,5 +1320,5 @@ DEFINE_LSM(ima) =3D { .order =3D LSM_ORDER_LAST, .blobs =3D &ima_blob_sizes, /* Start IMA after the TPM is available */ - .initcall_late =3D init_ima, + .initcall_late_sync =3D init_ima, }; diff --git a/security/lsm_init.c b/security/lsm_init.c index 573e2a7250c4..4e5c59beb82a 100644 --- a/security/lsm_init.c +++ b/security/lsm_init.c @@ -547,13 +547,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; - 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); return rc; } -late_initcall(security_initcall_late); +late_initcall_sync(security_initcall_late_sync); -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} From nobody Sat Jun 20 08:26:25 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 6FE9C2D0614; Fri, 17 Apr 2026 17:58:12 +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=1776448694; cv=none; b=sFtx45XYsTtBz7EZpX0emVznVwl2ky6PRsqp97Ip4Zfw9VYOQxokyp8Bnfgelqclqc363UQ9+JWc2kXDFifJTpceI95M3H6OBQTrL0Gjw/wuw5JfcwTfPwQDPCR/nz3O2zk5PePZuUUETS/G44WwocBmY5LlSEvQQo+DNvM52Ho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776448694; c=relaxed/simple; bh=+KnBVwVQsum+9CObFDKz95hXpLV5Rw5969CJRIdIoIQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mTT6cgVKTWr33ouCP9xQtRWUASnBoFHL2h1w96ZxHolt8r+2NQc4EmcfJ+VOf1PZKHe5KWHaTTIFXoTJW9DCJmuaV736c7vqLmnjtzi49XNehbtKWgMPvPRtRTSfA9cfyiNxfX2+tDSca1ZxcbuZhxhNwzoy0IJMBvB0QECyAfU= 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=T1aXdFw1; 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="T1aXdFw1" 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 428DC2944; Fri, 17 Apr 2026 10:58:06 -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 9599E3F7D8; Fri, 17 Apr 2026 10:58:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1776448691; bh=+KnBVwVQsum+9CObFDKz95hXpLV5Rw5969CJRIdIoIQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T1aXdFw1ZQlfTCMfEZ9QDq5gUlkhpeOXtZ0gmNCAyubzlZS0aaDtkG5KpO01D/tw0 JK3FDNZRqo83n2Mhodpavo4N6RsNmJIBwhsa3oHBveTiwpNnS1kT/bfR7200hrhaPD ZrunDHUHk9bimOBUfriy68s5iKVOlVJwTBFXZVWU= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: paul@paul-moore.com, jmorris@namei.org, serge@hallyn.com, zohar@linux.ibm.com, roberto.sassu@huawei.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, peterhuewe@gmx.de, jarkko@kernel.org, jgg@ziepe.ca, sudeep.holla@kernel.org, maz@kernel.org, oupton@kernel.org, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, catalin.marinas@arm.com, will@kernel.org, Yeoreum Yun Subject: [RFC PATCH 2/4] tpm: tpm_crb_ffa: revert defered_probed when tpm_crb_ffa is built-in Date: Fri, 17 Apr 2026 18:57:57 +0100 Message-Id: <20260417175759.3191279-3-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260417175759.3191279-1-yeoreum.yun@arm.com> References: <20260417175759.3191279-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, as IMA init function is changed to late_initcall_sync level. So, this change isn't required anymore. 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; if (IS_ERR_VALUE(tpm_crb_ffa)) - ret =3D -ENODEV; + return -ENODEV; - return ret; + return 0; } EXPORT_SYMBOL_GPL(tpm_crb_ffa_init); @@ -405,9 +395,7 @@ static struct ffa_driver tpm_crb_ffa_driver =3D { .id_table =3D tpm_crb_ffa_device_id, }; -#ifdef MODULE module_ffa_driver(tpm_crb_ffa_driver); -#endif MODULE_AUTHOR("Arm"); MODULE_DESCRIPTION("TPM CRB FFA driver"); -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} From nobody Sat Jun 20 08:26:25 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 377CE34FF62; Fri, 17 Apr 2026 17:58:15 +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=1776448698; cv=none; b=GQNlNWr7MYbj6l1ogyg7TMG9mqdh+PUdA9GzJPxDJbXc5rmwYPylL/xkgFBi8y02ogcl9n3rZQZGQ0dlNdYYkV9Y22WPjIxp+KWm3JB1V6wu8zCyTyh4mUpvYGJSo0Qmq0TbcH9so9v5XsVFj5reW+hJNB/5MJciVbgGTmNYeTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776448698; c=relaxed/simple; bh=OznS5k+Y9tBwswJLbKpzM/l10Fd+kOv7XSaKZ/Nsp/A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TCY4OO+9qQBtmLluHXlcACxFrmR2ESMtQIPzXbOM5jTBn90c0xMb2btBCEWaxq+qUL7jHe2OzAFP7W8F9ZbJkKZ9I9IQ3mMenB1IfLlTm2mzgfMu5gGt6c9psmHeu00T2YfFBYegCKnHUsU0SP/9fzBZxEnY4um3RvFHJkp+sOc= 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=KD6wLOy3; 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="KD6wLOy3" 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 DD1251D70; Fri, 17 Apr 2026 10:58: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 31E563F7D8; Fri, 17 Apr 2026 10:58:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1776448695; bh=OznS5k+Y9tBwswJLbKpzM/l10Fd+kOv7XSaKZ/Nsp/A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KD6wLOy3E7HTI+2ROb0L8q+IvHNRcfw8dyUJ/3sjB3mKLsebV+E/FDlTtn4k73EW3 CtWJVnAlL1JGRCVWAMM+bw/M+1RabxCbjEUD2nsbDxFEy+GG+vUJhpjXofMiRezwnJ cYN9pFXK8e4HOnZZA8LUXSNFNUZ73nNf39F6Jv2c= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: paul@paul-moore.com, jmorris@namei.org, serge@hallyn.com, zohar@linux.ibm.com, roberto.sassu@huawei.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, peterhuewe@gmx.de, jarkko@kernel.org, jgg@ziepe.ca, sudeep.holla@kernel.org, maz@kernel.org, oupton@kernel.org, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, catalin.marinas@arm.com, will@kernel.org, Yeoreum Yun Subject: [RFC PATCH 3/4] firmware: arm_ffa: revert ffa_init() initcall level to device_initcall Date: Fri, 17 Apr 2026 18:57:58 +0100 Message-Id: <20260417175759.3191279-4-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260417175759.3191279-1-yeoreum.yun@arm.com> References: <20260417175759.3191279-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 0e0546eabcd6 ("firmware: arm_ffa: Change initcall level of ffa_init(= ) to rootfs_initcall") changed the initcall level of ffa_init() to rootfs_initcall to address an issue where IMA could not properly recognize the TPM device. However, this introduces a problem: pKVM fails to handle any FF-A calls because it cannot trap the FFA_VERSION call invoked by ffa_init(). Since the IMA init function level has been changed to late_initcall_sync, there is no longer a need to keep ffa_init() at rootfs_initcall. Revert it back to device_initcall. Signed-off-by: Yeoreum Yun --- drivers/firmware/arm_ffa/driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/d= river.c index f2f94d4d533e..02c76ac1570b 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -2106,7 +2106,7 @@ static int __init ffa_init(void) kfree(drv_info); return ret; } -rootfs_initcall(ffa_init); +device_initcall(ffa_init); static void __exit ffa_exit(void) { -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7} From nobody Sat Jun 20 08:26:25 2026 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 84A0E34EF0D; Fri, 17 Apr 2026 17:58: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=1776448700; cv=none; b=pumm5ikdIyPrcOeS4xBvdvLC9tSGg8qTb2RMyLQaj0avpFcZiylHQsL/qnuvfJCRxaqhOyRXw6dVXFxjTqcIz2Zsmdh194anZPbkrC/DNy35YzY5B3Ap8qRwTmplMw/hrTIgBNKzdwC56IBuwNUM5dQcVPLJkhKDbozus97xOmk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776448700; c=relaxed/simple; bh=e3o4nX2FYzFLs1uAJiYhcCfAbWsy9IaHHY4Cf/NSGlU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NmvnItbM++KSIsmCpSYqKoSmKfKBDs6vcpBmieh1ldLqTMG/7dj5J+Zd7jQ7DXTWZJy4TdibId+j/HQCki6O4dbGOahDZw4UhoA1ItM2IcVdgaeASpLsOI4bQVxyrVi236vOn3AOHj99+8O/pQXoDPlYK+Mu0zkwaOIkE1IqyxE= 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=PAQgiHJf; 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="PAQgiHJf" 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 7B1CE1D70; Fri, 17 Apr 2026 10:58:13 -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 CAEDA3F7D8; Fri, 17 Apr 2026 10:58:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=arm.com; s=foss; t=1776448699; bh=e3o4nX2FYzFLs1uAJiYhcCfAbWsy9IaHHY4Cf/NSGlU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PAQgiHJflKchkVTf/kQxxIrjzTHGvFJkuV2kwY6XVZZlvHYUbI3Avkufy0FHECdDg 0P+g9FWmwfm3CDwAafNIVAFd5MRZvLs98syRr3ZCobKtO8PfJc1iP/boxHqZ8imHPw eybNPYc6+cBCnjNgTj1nJ8zU6CpETaF8idHpaOrA= From: Yeoreum Yun To: linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, linux-integrity@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.linux.dev Cc: paul@paul-moore.com, jmorris@namei.org, serge@hallyn.com, zohar@linux.ibm.com, roberto.sassu@huawei.com, dmitry.kasatkin@gmail.com, eric.snowberg@oracle.com, peterhuewe@gmx.de, jarkko@kernel.org, jgg@ziepe.ca, sudeep.holla@kernel.org, maz@kernel.org, oupton@kernel.org, joey.gouly@arm.com, suzuki.poulose@arm.com, yuzenghui@huawei.com, catalin.marinas@arm.com, will@kernel.org, Yeoreum Yun Subject: [RFC PATCH 4/4] firmware: arm_ffa: check pkvm initailised when initailise ffa driver Date: Fri, 17 Apr 2026 18:57:59 +0100 Message-Id: <20260417175759.3191279-5-yeoreum.yun@arm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20260417175759.3191279-1-yeoreum.yun@arm.com> References: <20260417175759.3191279-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" When pKVM is enabled, the FF-A driver must be initialized after pKVM. Otherwise, pKVM cannot negotiate the FF-A version or obtain RX/TX buffer information, leading to failures in FF-A calls. During FF-A driver initialization, check whether pKVM has been initialized. If not, defer probing of the FF-A driver. Signed-off-by: Yeoreum Yun --- arch/arm64/kvm/arm.c | 1 + drivers/firmware/arm_ffa/driver.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index 410ffd41fd73..0f517b1c05cd 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -119,6 +119,7 @@ bool is_kvm_arm_initialised(void) { return kvm_arm_initialised; } +EXPORT_SYMBOL(is_kvm_arm_initialised); int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu) { diff --git a/drivers/firmware/arm_ffa/driver.c b/drivers/firmware/arm_ffa/d= river.c index 02c76ac1570b..2647d6554afd 100644 --- a/drivers/firmware/arm_ffa/driver.c +++ b/drivers/firmware/arm_ffa/driver.c @@ -42,6 +42,8 @@ #include #include +#include + #include "common.h" #define FFA_DRIVER_VERSION FFA_VERSION_1_2 @@ -2035,6 +2037,16 @@ static int __init ffa_init(void) u32 buf_sz; size_t rxtx_bufsz =3D SZ_4K; + /* + * When pKVM is enabled, the FF-A driver must be initialized + * after pKVM initialization. Otherwise, pKVM cannot negotiate + * the FF-A version or obtain RX/TX buffer information, + * which leads to failures in FF-A calls. + */ + if (IS_ENABLED(CONFIG_KVM) && is_protected_kvm_enabled() && + !is_kvm_arm_initialised()) + return -EPROBE_DEFER; + ret =3D ffa_transport_init(&invoke_ffa_fn); if (ret) return ret; -- LEVI:{C3F47F37-75D8-414A-A8BA-3980EC8A46D7}