Linux Security Modules development
 help / color / mirror / Atom feed
From: cuigaosheng <cuigaosheng1@huawei.com>
To: Eric Biggers <ebiggers@kernel.org>
Cc: <lujialin4@huawei.com>, <zohar@linux.ibm.com>,
	<roberto.sassu@huawei.com>, <dmitry.kasatkin@gmail.com>,
	<eric.snowberg@oracle.com>, <paul@paul-moore.com>,
	<jmorris@namei.org>, <serge@hallyn.com>,
	<linux-integrity@vger.kernel.org>,
	<linux-security-module@vger.kernel.org>
Subject: Re: [PATCH -next,v3] ima: add cond_resched() in ima_calc_file_hash_tfm loop
Date: Sat, 1 Aug 2026 18:50:28 +0800	[thread overview]
Message-ID: <0c590f6c-8ab0-f0ed-25a8-fa8a2ec6008e@huawei.com> (raw)
In-Reply-To: <20260728171414.GA3355536@google.com>


On 2026/7/29 1:14, Eric Biggers wrote:
> On Tue, Jul 28, 2026 at 08:33:50PM +0800, Gaosheng Cui wrote:
>> When hashing large files, the while loop in ima_calc_file_hash_tfm
>> processes PAGE_SIZE chunks without any scheduling point, which can
>> cause soft lockup warnings:
>> watchdog: BUG: soft lockup - CPU#0 stuck for 50s!
>> Call Trace:
>>    _sha256_update+0x12d/0x1a0
>>    ima_calc_file_hash_tfm+0xfb/0x150
>>    ima_calc_file_hash+0x6e/0x160
>>    ima_collect_measurement+0x202/0x340
>>    process_measurement+0x3a9/0xb30
>>    ima_file_check+0x56/0xa0
>>    do_open+0x11b/0x250
>>    path_openat+0x10b/0x1d0
>>    do_filp_open+0xa9/0x150
>>    do_sys_openat2+0x223/0x2a0
>>    __x64_sys_openat+0x54/0xa0
>>    do_syscall_64+0x59/0x110
>>    entry_SYSCALL_64_after_hwframe+0x78/0xe2
>>
>> Call cond_resched() every 4MB to yield the CPU when needed, rather
>> than at every loop iteration, to reduce overhead.
>>
>> Using IS_ALIGNED(offset, SZ_4M) to trigger cond_resched() is fragile
>> because integrity_kernel_read() -> __kernel_read() can return fewer
>> bytes than requested (short read). Short reads can occur across
>> various filesystems — while common on remote (NFS, CIFS) and FUSE
>> filesystems, they are also possible in edge cases on local
>> filesystems (e.g., reading near EOF). Once a short read occurs,
>> the offset becomes permanently misaligned and cond_resched() may
>> never be called again for the remainder of the file. Replace the
>> alignment check with a cumulative byte counter that tracks the
>> actual data hashed since the last reschedule point, which is robust
>> regardless of short read behavior.
>>
>> Fixes: 3323eec921ef ("integrity: IMA as an integrity service provider")
>> Signed-off-by: Gaosheng Cui <cuigaosheng1@huawei.com>
> Which architecture are you seeing this issue on, and which kernel
> version?  In current mainline, most architectures (x86, arm64,
> loongarch, riscv, s390) offer only lazy preemption and full preemption.
> In all these cases, cond_resched() is obsolete and unnecessary.
>
> I understand the concept of cond_resched() as a whole is on its way out.
> It is an approach that has never worked well.
>
> Is it possible that you're seeing this issue only on an older kernel
> version and not mainline?
>
> - Eric
> .

Thanks for the clarification and the context on the preemption model direction.

I encountered this soft lockup on the 6.6 stable kernel with PREEMPT_VOLUNTARY
(arm64 and x86_64), where ima_calc_file_hash_tfm() can spin for tens of seconds
on large files without any preemption point, starving the watchdog's migration thread.
I verified on linux-next 7.2.0-rc4 (x86_64, PREEMPT_LAZY) that the issue is not
reproducible, so mainline does not need this fix.

Thank you for the insight.


      reply	other threads:[~2026-08-01 10:50 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-28 12:33 [PATCH -next,v3] ima: add cond_resched() in ima_calc_file_hash_tfm loop Gaosheng Cui
2026-07-28 17:14 ` Eric Biggers
2026-08-01 10:50   ` cuigaosheng [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=0c590f6c-8ab0-f0ed-25a8-fa8a2ec6008e@huawei.com \
    --to=cuigaosheng1@huawei.com \
    --cc=dmitry.kasatkin@gmail.com \
    --cc=ebiggers@kernel.org \
    --cc=eric.snowberg@oracle.com \
    --cc=jmorris@namei.org \
    --cc=linux-integrity@vger.kernel.org \
    --cc=linux-security-module@vger.kernel.org \
    --cc=lujialin4@huawei.com \
    --cc=paul@paul-moore.com \
    --cc=roberto.sassu@huawei.com \
    --cc=serge@hallyn.com \
    --cc=zohar@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox