opnsense-src/sys/compat
Ryan Stone b58cf1cb35 Fix race condition in linuxkpi workqueue
Consider the following scenario:

1. A delayed_work struct in the WORK_ST_TIMER state.
2. Thread A calls mod_delayed_work()
3. Thread B (a callout thread) simultaneously calls
linux_delayed_work_timer_fn()

The following sequence of events is possible:

A: Call linux_cancel_delayed_work()
A: Change state from TIMER TO CANCEL
B: Change state from CANCEL to TASK
B: taskqueue_enqueue() the task
A: taskqueue_cancel() the task
A: Call linux_queue_delayed_work_on().  This is a no-op because the
state is WORK_ST_TASK.

As a result, the delayed_work struct will never be invoked.  This is
causing address resolution in ib_addr.c to stop permanently, as it
never tries to reschedule a task that it thinks is already scheduled.

Fix this by introducing locking into the cancel path (which
corresponds with the lock held while the callout runs).  This will
prevent the callout from changing the state of the task until the
cancel is complete, preventing the race.

Differential Revision:	https://reviews.freebsd.org/D28420
Reviewed by: hselasky
MFC after: 2 months
2021-02-04 13:54:53 -05:00
..
cloudabi Rename kern_mmap_req to kern_mmap 2021-01-25 21:50:37 +00:00
cloudabi32 Regen after r366145. 2020-09-25 10:05:38 +00:00
cloudabi64 Regen after r366145. 2020-09-25 10:05:38 +00:00
freebsd32 Rename kern_mmap_req to kern_mmap 2021-01-25 21:50:37 +00:00
ia32 random(4) FenestrasX: Push root seed version to arc4random(3) 2020-10-10 21:52:00 +00:00
lindebugfs Add emulation support for the Linux kcov(4) ioctl API. 2020-09-04 00:12:28 +00:00
linprocfs Make MAXPHYS tunable. Bump MAXPHYS to 1M. 2020-11-28 12:12:51 +00:00
linsysfs Add emulation support for the Linux kcov(4) ioctl API. 2020-09-04 00:12:28 +00:00
linux linux: remove locks around callout_drain in timerfd_close() 2021-02-03 19:47:38 +00:00
linuxkpi/common Fix race condition in linuxkpi workqueue 2021-02-04 13:54:53 -05:00
x86bios Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00