Avoid a race condition in glibc between AIO and setresuid().
authorAndrew Tridgell <tridge@samba.org>
Sun, 24 Aug 2008 03:56:59 +0000 (13:56 +1000)
committerJeremy Allison <jra@samba.org>
Tue, 26 Aug 2008 16:37:58 +0000 (09:37 -0700)
commit5e3b978c51e741d413b856adafa1b1090ed8dd7b
tree18642508c1c172b8ac053f83194f9f08df9e8afb
parent1e1449afba5d37fcfd26e0ca7edde05715bc48f7
Avoid a race condition in glibc between AIO and setresuid().

See this test: http://samba.org/~tridge/junkcode/aio_uid.c

The problem is that setresuid() tries to be clever about threads, and
tries to change the euid of any threads that are running. If a AIO read
or write completes while this is going on then the signal from the thread
where the IO completed is lost, as it gets -1/EPERM from rt_sigqueueinfo()

The simplest fix is to try to use setreuid() instead of setresuid(),
as setreuid() doesn't try to be clever. Unfortunately this also means
we must use become_root()/unbecome_root() in the aio code.
source/configure.in