Re: [PATCH 2/2] ima: don't measure/appraise files on configfs

Mimi Zohar <[email protected]>
Newsgroups org.kernel.vger.linux-security-module,org.kernel.vger.linux-integrity,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
On Tue, 2026-08-18 at 14:35 -0500, Frederick Lawler wrote:
> When IMA appraises/measures a file configfs, it has an opportunity to
> hold onto the ima_iint_mutex while another file from a different file
> system is attempting to appraise/measure. This may cause a cyclical
> lock dependency.

The locking description is off a bit.

Suggested patch desciption from AI:

IMA measurement of a configfs file causes process_measurement() to hold iint-
>mutex while performing a kernel_read() to hash it, which re-enters configfs's
own file locking (buffer->mutex, frag_sem).

Separately, opening any file with O_TRUNC now causes ima_file_truncate() to take
iint->mutex to reset the cached action flags, while sb_writers is already held
for that mount.

When a configfs-backed nvmet namespace is involved, these two independent lock
chains combine into a cycle:

iint->mutex -> configfs locks -> subsys->lock -> sb_writers -> iint->mutex

Add configfs to the builtin don't measure/appraise rules, similarly to other
pseudo file systems, so IMA never takes iint->mutex for configfs file in the
first place.

> 
> Add configfs to the default don't measure/appraise lists, similarly to
> other pseudo file systems.
> 
> Reported-by: [email protected]
> Link: https://lore.kernel.org/all/[email protected]/
> Suggested-by: Mimi Zohar <[email protected]>
> Signed-off-by: Frederick Lawler <[email protected]>

Sashiko is now enabled for the linux-integrity mailing list -
https://sashiko.dev/#/?list=org.kernel.vger.linux-integrity.   Please address
Sashiko's 2/2 review.

thanks,

Mimi

> ---
>  security/integrity/ima/ima_policy.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
> index f79d07bb63c6fc4ba6fe594140de8d59f57e4f0b..68d9a5e6c232ea0678e9f51f105cebecccccb43e 100644
> --- a/security/integrity/ima/ima_policy.c
> +++ b/security/integrity/ima/ima_policy.c
> @@ -165,7 +165,10 @@ static struct ima_rule_entry dont_measure_rules[] __ro_after_init = {
>  	{.action = DONT_MEASURE, .fsmagic = CGROUP2_SUPER_MAGIC,
>  	 .flags = IMA_FSMAGIC},
>  	{.action = DONT_MEASURE, .fsmagic = NSFS_MAGIC, .flags = IMA_FSMAGIC},
> -	{.action = DONT_MEASURE, .fsmagic = EFIVARFS_MAGIC, .flags = IMA_FSMAGIC}
> +	{.action = DONT_MEASURE, .fsmagic = EFIVARFS_MAGIC,
> +	 .flags = IMA_FSMAGIC},
> +	{.action = DONT_MEASURE, .fsmagic = CONFIGFS_MAGIC,
> +	 .flags = IMA_FSMAGIC}
>  };
>  
>  static struct ima_rule_entry original_measurement_rules[] __ro_after_init = {
> @@ -211,6 +214,8 @@ static struct ima_rule_entry default_appraise_rules[] __ro_after_init = {
>  	{.action = DONT_APPRAISE, .fsmagic = EFIVARFS_MAGIC, .flags = IMA_FSMAGIC},
>  	{.action = DONT_APPRAISE, .fsmagic = CGROUP_SUPER_MAGIC, .flags = IMA_FSMAGIC},
>  	{.action = DONT_APPRAISE, .fsmagic = CGROUP2_SUPER_MAGIC, .flags = IMA_FSMAGIC},
> +	{.action = DONT_APPRAISE, .fsmagic = CONFIGFS_MAGIC,
> +	 .flags = IMA_FSMAGIC},
>  #ifdef CONFIG_IMA_WRITE_POLICY
>  	{.action = APPRAISE, .func = POLICY_CHECK,
>  	.flags = IMA_FUNC | IMA_DIGSIG_REQUIRED},
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.