Page MenuHomeFreeBSD

kern_kthread: fork1() does not handle locked Giant
ClosedPublic

Authored by kib on Sep 2 2023, 7:35 AM.
Tags
None
Referenced Files
F132456971: D41694.id126830.diff
Fri, Oct 17, 2:29 AM
F132438638: D41694.diff
Thu, Oct 16, 11:07 PM
Unknown Object (File)
Thu, Oct 16, 6:52 AM
Unknown Object (File)
Thu, Oct 16, 6:52 AM
Unknown Object (File)
Wed, Oct 15, 7:25 PM
Unknown Object (File)
Sep 17 2025, 1:19 PM
Unknown Object (File)
Aug 20 2025, 12:17 PM
Unknown Object (File)
Aug 19 2025, 8:47 PM
Subscribers

Details

Summary
fork1() does not behave if called under Giant.  For instance, it might
need to call thread_suspend_check() which explicitly verifies that Giant
is not locked.  On the other hand, the kthread KPI is often called from
SYSINIT() which is still Giant-locked.

Handle this by dropping Giant in kthread_add() and kproc_create().

See for instance https://people.freebsd.org/~pho/stress/log/log0485.txt

Style changes will be a separate commit.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable