diff options
author | 2022-03-08 13:42:17 +1100 | |
---|---|---|
committer | 2022-03-23 14:50:04 -0400 | |
commit | 3848e96edf4788f772d83990022fa7023a233d83 (patch) | |
tree | e3b204cdb8ae14a6b8864267edbbf6165a62bb6d /tools/perf/scripts/python/export-to-postgresql.py | |
parent | pNFS/files: Ensure pNFS allocation modes are consistent with nfsiod (diff) | |
download | wireguard-linux-3848e96edf4788f772d83990022fa7023a233d83.tar.xz wireguard-linux-3848e96edf4788f772d83990022fa7023a233d83.zip |
SUNRPC: avoid race between mod_timer() and del_timer_sync()
xprt_destory() claims XPRT_LOCKED and then calls del_timer_sync().
Both xprt_unlock_connect() and xprt_release() call
->release_xprt()
which drops XPRT_LOCKED and *then* xprt_schedule_autodisconnect()
which calls mod_timer().
This may result in mod_timer() being called *after* del_timer_sync().
When this happens, the timer may fire long after the xprt has been freed,
and run_timer_softirq() will probably crash.
The pairing of ->release_xprt() and xprt_schedule_autodisconnect() is
always called under ->transport_lock. So if we take ->transport_lock to
call del_timer_sync(), we can be sure that mod_timer() will run first
(if it runs at all).
Cc: stable@vger.kernel.org
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions