Page MenuHomeFreeBSD

proc: Disallow re-enabling of process itimers during exit
ClosedPublic

Authored by markj on Mar 27 2025, 10:32 AM.
Tags
None
Referenced Files
F152071607: D49529.id152733.diff
Sun, Apr 12, 12:55 PM
F151985563: D49529.diff
Sat, Apr 11, 10:49 PM
F151958332: D49529.id152733.diff
Sat, Apr 11, 6:51 PM
Unknown Object (File)
Sat, Apr 11, 2:37 AM
Unknown Object (File)
Fri, Apr 10, 8:56 PM
Unknown Object (File)
Fri, Apr 10, 2:56 PM
Unknown Object (File)
Tue, Apr 7, 7:42 AM
Unknown Object (File)
Wed, Apr 1, 9:58 PM
Subscribers

Details

Summary

During process exit, it's possible for the exiting thread to send a
signal to its process, via killjobc(). This happens after the itimer is
drained. If itimers are stopped, i.e., P2_ITSTOPPED is set, then
itimer_proc_continue() will resume the callout after it has been
drained.

Fix the problem by simply clearing P2_ITSTOPPED as part of the drain.
Then, a signal received after that point will not re-enable the callout.

Reported by: syzkaller

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 63170
Build 60054: arc lint + arc unit

Event Timeline

I think this is fine.
But also I suggest to add the check for P_WEXIT/P_KILLED before re-arming the itimer callouts.

This revision is now accepted and ready to land.Mar 27 2025, 4:59 PM

Check for P_WEXIT in realitexpire_reset_callout() too.

This revision now requires review to proceed.Mar 28 2025, 8:54 AM
This revision is now accepted and ready to land.Mar 28 2025, 3:22 PM