freebsd-dev/sys
Mark Johnston b319171861 setitimer: Fix exit race
We use the p_itcallout callout, interlocked by the proc lock, to
schedule timeouts for the setitimer(2) system call.  When a process
exits, the callout must be stopped before the process struct is
recycled.

Currently we attempt to stop the callout in exit1() with the call
_callout_stop_safe(&p->p_itcallout, CS_EXECUTING).  If this call returns
0, then we sleep in order to drain the callout.  However, this happens
only if the callout is not scheduled at all.  If the callout thread is
blocked on the proc lock, then exit1() will not block and the callout
may execute after the process has fully exited, typically resulting in a
panic.

I cannot see a reason to use the CS_EXECUTING flag here.  Instead, use
the regular callout_stop()/callout_drain() dance to halt the callout.

Reported by:	ler
Tested by:	ler, pho
MFC after:	1 month
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D34625
2022-03-23 12:36:12 -04:00
..
amd64 x86/tsc: fetch frequency from CPUID when running on Xen 2022-03-18 10:21:04 +01:00
arm armv6/legacy: optimize cpu_getcount performance 2022-03-14 07:51:21 +01:00
arm64 Remove L2_BLOCK_MASK from arm64 2022-03-23 15:33:05 +00:00
bsm
cam CTL: Rework 05c3e8e871 using %zu format. 2022-02-25 11:53:53 -05:00
cddl zfs: merge openzfs/zfs@a86e08941 (master) into main 2022-03-08 18:53:02 +01:00
compat linuxkpi: Add down_write_nest_lock 2022-03-23 14:37:53 +01:00
conf Retire broken snd_ds1 and snd_maestro drivers 2022-03-18 20:33:19 -04:00
contrib zfs: add missing replay check to an assert in zfs_xvattr_set 2022-03-15 11:38:58 +00:00
crypto armv8crypto: Remove leftover debug printfs 2022-02-17 14:25:45 -05:00
ddb ddb: Remove SOFTWARE_SSTEP support 2022-01-07 09:25:33 -07:00
dev Add devices and quirks for some Olympus cameras. 2022-03-23 12:40:28 +11:00
dts dts: add IPQ4018/IPQ4019 ethernet MAC and ethernet switch definitions 2022-02-03 21:26:45 -08:00
fs nullfs: hash insertion without vnode lock upgrade 2022-03-19 10:47:10 +00:00
gdb gdb(4): Do not use run length encoding for 3-symbol repetitions 2022-01-22 14:46:06 -05:00
geom GEOM: Introduce partial confxml API 2022-03-12 11:55:52 -05:00
gnu
i386 x86/tsc: fetch frequency from CPUID when running on Xen 2022-03-18 10:21:04 +01:00
isa sys/isa: Use C99 fixed-width integer types. 2021-12-28 09:41:57 -08:00
kern setitimer: Fix exit race 2022-03-23 12:36:12 -04:00
kgssapi
libkern sys/libkern: Use C99 fixed-width integer types. 2021-12-28 09:42:11 -08:00
modules Retire broken snd_ds1 and snd_maestro drivers 2022-03-18 20:33:19 -04:00
net if_epair: build fix 2022-03-17 06:43:47 +01:00
net80211 net80211: introduce (*iv_update_bss)() 2022-03-22 18:51:43 +00:00
netgraph ng pppoe(4): Add the required NET_EPOCH section to the hook 2022-02-09 22:00:50 +03:00
netinet IPv4 multicast: fix netstat -g 2022-03-22 07:38:01 -05:00
netinet6 Fix a memory leak when ip_output_send() returns EAGAIN due to send tag issues 2022-01-27 10:34:34 -05:00
netipsec ipsec: sprinkle CURVNET_ASSERT_SET 2022-02-19 13:10:41 +00:00
netpfil pf: fix !INET or !INET6 builds 2022-03-16 12:52:07 -07:00
netsmb
nfs nfs: don't truncate directory cookies to 32-bits in the NFS server 2021-12-15 20:54:57 -07:00
nfsclient
nfsserver
nlm sys/nlm: Use C99 fixed-width integer types. 2021-12-28 09:42:42 -08:00
ofed ibcore: Fix multiple includes of same header file. 2022-03-03 12:51:20 +01:00
opencrypto crypto: hide crypto_destroyreq behind a tunable 2022-02-16 07:45:12 +00:00
powerpc powerpcspe: fix PCI enumeration on ppce500 2022-03-21 16:11:33 -03:00
riscv riscv: Add support for enabling SV48 mode 2022-03-01 09:39:44 -05:00
rpc sys/rpc: Use C99 fixed-width integer types. 2021-12-28 09:43:15 -08:00
security Thread creation privilege for realtime group 2021-12-15 00:01:58 +02:00
sys vfs: replace VFS_NOTIFY_UPPER_* macros with an enum 2022-03-19 13:15:55 +00:00
teken teken: color #3 is yellow not brown - use TC_YELLOW as the name 2022-03-12 09:17:29 -05:00
tests
tools Revert "syscallarg_t: Add a type for system call arguments" 2022-01-12 23:29:20 +00:00
ufs ffs_mount(): fix snapshotting 2022-03-16 17:32:37 -08:00
vm uma: Add UMA_ZONE_UNMANAGED 2022-02-15 09:25:34 -05:00
x86 x86/tsc: fetch frequency from CPUID when running on Xen 2022-03-18 10:21:04 +01:00
xdr sys/xdr: Use C99 fixed-width integer types. 2021-12-28 09:43:26 -08:00
xen xen: remove public headers in sys/xen/interface 2022-02-07 10:12:34 +01:00
Makefile Fix 'make cscope' with ALL_ARCH defined 2022-01-07 11:53:52 -04:00