mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
Wrap setting leases in become_root()/unbecome_root() to ensure correct delivery of signals.
Remove workaround for Linux kernel bug https://bugzilla.kernel.org/show_bug.cgi?id=43336 as we don't need to set capabilities when we're already root. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Simo Sorce <idra@samba.org>
This commit is contained in:
parent
63db0694c4
commit
1af8b07929
@ -75,26 +75,33 @@ int linux_set_lease_sighandler(int fd)
|
||||
int linux_setlease(int fd, int leasetype)
|
||||
{
|
||||
int ret;
|
||||
int saved_errno;
|
||||
|
||||
/*
|
||||
* Ensure the lease owner is root to allow
|
||||
* correct delivery of lease-break signals.
|
||||
*/
|
||||
|
||||
become_root();
|
||||
|
||||
/* First set the signal handler. */
|
||||
if (linux_set_lease_sighandler(fd) == -1) {
|
||||
return -1;
|
||||
saved_errno = errno;
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
ret = fcntl(fd, F_SETLEASE, leasetype);
|
||||
if (ret == -1 && errno == EACCES) {
|
||||
set_effective_capability(LEASE_CAPABILITY);
|
||||
/*
|
||||
* Bug 8974 - work around Linux kernel bug
|
||||
* https://bugzilla.kernel.org/show_bug.cgi?id=43336.
|
||||
* "fcntl(F_SETLEASE) resets signal number when
|
||||
* called multiple times"
|
||||
*/
|
||||
if (linux_set_lease_sighandler(fd) == -1) {
|
||||
return -1;
|
||||
}
|
||||
ret = fcntl(fd, F_SETLEASE, leasetype);
|
||||
if (ret == -1) {
|
||||
saved_errno = errno;
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
unbecome_root();
|
||||
|
||||
if (ret == -1) {
|
||||
errno = saved_errno;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user