mirror of
https://github.com/samba-team/samba.git
synced 2025-01-07 17:18:11 +03:00
dd516b9baf
We protect setting tctx->event_ctx=NULL with tctx->event_ctx_mutex.
But in _tevent_threaded_schedule_immediate we have the classic
TOCTOU race: After we checked "ev==NULL", looking at
tevent_common_context_destructor the event context can go after
_tevent_threaded_schedule_immediate checked. We need to serialize
things a bit by keeping tctx->event_ctx_mutex locked while we
reference "ev", in particular in the
DLIST_ADD_END(ev->scheduled_immediates,im);
I think the locking hierarchy is still maintained, tevent_atfork_prepare()
first locks all the tctx locks, and then the scheduled_mutex. Also,
I don't think this will impact parallelism too badly: event_ctx_mutex
is only used to protect setting tctx->ev.
Found by staring at code while fixing the FreeBSD memleak due to
not destroying scheduled_mutex.
Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Jun 9 00:45:26 CEST 2017 on sn-devel-144
(cherry picked from commit
|
||
---|---|---|
.. | ||
addns | ||
afs | ||
async_req | ||
compression | ||
crypto | ||
dbwrap | ||
krb5_wrap | ||
ldb | ||
ldb-samba | ||
nss_wrapper | ||
param | ||
replace | ||
resolv_wrapper | ||
smbconf | ||
socket | ||
socket_wrapper | ||
talloc | ||
tdb | ||
tdb_wrap | ||
tdr | ||
tevent | ||
texpect | ||
torture | ||
tsocket | ||
uid_wrapper | ||
util | ||
README | ||
wscript_build |
compression - Various compression algorithms (MSZIP, lzxpress) dnspython - Python module for working with DNS. nss_wrapper - Wrapper for the user and group NSS API allowing the use of other data sources. popt - Command-line option parsing library replace - Provides replacements for standard (POSIX, C99) functions not provided by the host platform. socket_wrapper - Wrapper library allowing TCP/IP traffic to be redirected over Unix domain sockets. subunit - Utilities and bindings for working with the Subunit test result reporting protocol. talloc - Hierarchical pool based memory allocator tdb - Simple but fast key/value database library, supporting multiple writers torture - Simple unit testing helper library