2.6.0-test3: setuid32(8) returns EAGAIN (WTF?!)
I just changed from 2.5.75 to 2.6.0-test3 and suddenly my imap server fails to start (it's dovecot). It wrote to syslog:
Aug 17 02:58:02 hellhound dovecot: Dovecot starting up Aug 17 02:58:03 hellhound imap-login: setuid(8) failed: Resource temporarily unavailable Aug 17 02:58:03 hellhound dovecot: Login process died too early - shutting down
So I strace -f it, and sure enough, here is what happens:
[init, fork, tzfile...]
8094 chroot("/var/run/dovecot//login") = 0
8094 chdir("/") = 0
8094 setuid32(0x8) = -1 EAGAIN (Resource temporarily unavailable)Now this does not appear to be a valid return value for setuid32, and my understanding of POSIX and Susv3 is that dovecot is absolutely right in barfing at this.
Why is this happening? Please fix!
Felix
PS: Time for a brown paper bag bug-fix release, if you ask me.
Quoted 7 lines · Felix von Leitner
I just changed from 2.5.75 to 2.6.0-test3 and suddenly my imap server fails to start (it's dovecot). It wrote to syslog:
Aug 17 02:58:02 hellhound dovecot: Dovecot starting up Aug 17 02:58:03 hellhound imap-login: setuid(8) failed: Resource temporarily unavailable Aug 17 02:58:03 hellhound dovecot: Login process died too early - shutting down
Quoted 8 lines
So I strace -f it, and sure enough, here is what happens:
[init, fork, tzfile...]
8094 chroot("/var/run/dovecot//login") = 0 8094 chdir("/") = 0 8094 setuid32(0x8) = -1 EAGAIN (Resource temporarily unavailable)Why is this happening?
In sys.c:set_user() we see
if (atomic_read(&new_user->processes) >=
current->rlim[RLIMIT_NPROC].rlim_cur &&
new_user != &root_user) {
free_uid(new_user);
return -EAGAIN;
}which was added in patch-2.6.0-test2.
No doubt this causes your problem.
You might check what values these variables have for you.
Andries