diff options
author | Karolin Seeger <kseeger@samba.org> | 2010-03-08 20:34:39 +0100 |
---|---|---|
committer | Karolin Seeger <kseeger@samba.org> | 2010-03-08 20:34:39 +0100 |
commit | 1c9494c76cc9686c61e0966f38528d3318f3176f (patch) | |
tree | ef94287f736857592e3b8e215f3b29bc790f465e | |
parent | cd499eaf0418fa0a3034c5ba4709278a302ea980 (diff) | |
download | samba-3.5.1.tar.gz |
Revert "Fix bug #7067 - Linux asynchronous IO (aio) can cause smbd to fail to respond to a read or write."samba-3.5.1
This reverts commit a6ae7a552f851a399991262377cc0e062e40ac20.
This fixes bug #7222 (All users have full rigths on all shares) (CVE-2010-0728).
-rw-r--r-- | source3/include/smb.h | 3 | ||||
-rw-r--r-- | source3/lib/system.c | 65 | ||||
-rw-r--r-- | source3/smbd/server.c | 8 |
3 files changed, 5 insertions, 71 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h index 041c96badad..bc7a90d5492 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -1723,8 +1723,7 @@ minimum length == 24. enum smbd_capability { KERNEL_OPLOCK_CAPABILITY, DMAPI_ACCESS_CAPABILITY, - LEASE_CAPABILITY, - KILL_CAPABILITY + LEASE_CAPABILITY }; /* diff --git a/source3/lib/system.c b/source3/lib/system.c index 9c1da3a78bd..a58d9037a79 100644 --- a/source3/lib/system.c +++ b/source3/lib/system.c @@ -883,11 +883,6 @@ char *sys_getwd(char *s) #if defined(HAVE_POSIX_CAPABILITIES) -/* This define hasn't made it into the glibc capabilities header yet. */ -#ifndef SECURE_NO_SETUID_FIXUP -#define SECURE_NO_SETUID_FIXUP 2 -#endif - /************************************************************************** Try and abstract process capabilities (for systems that have them). ****************************************************************************/ @@ -918,32 +913,6 @@ static bool set_process_capability(enum smbd_capability capability, } #endif -#if defined(HAVE_PRCTL) && defined(PR_SET_SECUREBITS) && defined(SECURE_NO_SETUID_FIXUP) - /* New way of setting capabilities as "sticky". */ - - /* - * Use PR_SET_SECUREBITS to prevent setresuid() - * atomically dropping effective capabilities on - * uid change. Only available in Linux kernels - * 2.6.26 and above. - * - * See here: - * http://www.kernel.org/doc/man-pages/online/pages/man7/capabilities.7.html - * for details. - * - * Specifically the CAP_KILL capability we need - * to allow Linux threads under different euids - * to send signals to each other. - */ - - if (prctl(PR_SET_SECUREBITS, 1 << SECURE_NO_SETUID_FIXUP)) { - DEBUG(0,("set_process_capability: " - "prctl PR_SET_SECUREBITS failed with error %s\n", - strerror(errno) )); - return false; - } -#endif - cap = cap_get_proc(); if (cap == NULL) { DEBUG(0,("set_process_capability: cap_get_proc failed: %s\n", @@ -972,11 +941,6 @@ static bool set_process_capability(enum smbd_capability capability, cap_vals[num_cap_vals++] = CAP_LEASE; #endif break; - case KILL_CAPABILITY: -#ifdef CAP_KILL - cap_vals[num_cap_vals++] = CAP_KILL; -#endif - break; } SMB_ASSERT(num_cap_vals <= ARRAY_SIZE(cap_vals)); @@ -986,37 +950,16 @@ static bool set_process_capability(enum smbd_capability capability, return True; } - /* - * Ensure the capability is effective. We assume that as a root - * process it's always permitted. - */ - - if (cap_set_flag(cap, CAP_EFFECTIVE, num_cap_vals, cap_vals, - enable ? CAP_SET : CAP_CLEAR) == -1) { - DEBUG(0, ("set_process_capability: cap_set_flag effective " - "failed (%d): %s\n", - (int)capability, - strerror(errno))); - cap_free(cap); - return false; - } + cap_set_flag(cap, CAP_EFFECTIVE, num_cap_vals, cap_vals, + enable ? CAP_SET : CAP_CLEAR); /* We never want to pass capabilities down to our children, so make * sure they are not inherited. */ - if (cap_set_flag(cap, CAP_INHERITABLE, num_cap_vals, - cap_vals, CAP_CLEAR) == -1) { - DEBUG(0, ("set_process_capability: cap_set_flag inheritable " - "failed (%d): %s\n", - (int)capability, - strerror(errno))); - cap_free(cap); - return false; - } + cap_set_flag(cap, CAP_INHERITABLE, num_cap_vals, cap_vals, CAP_CLEAR); if (cap_set_proc(cap) == -1) { - DEBUG(0, ("set_process_capability: cap_set_flag (%d) failed: %s\n", - (int)capability, + DEBUG(0, ("set_process_capability: cap_set_proc failed: %s\n", strerror(errno))); cap_free(cap); return False; diff --git a/source3/smbd/server.c b/source3/smbd/server.c index fb0efd2ae52..09ad8d8ea55 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -1047,14 +1047,6 @@ extern void build_options(bool screen); gain_root_privilege(); gain_root_group_privilege(); - /* - * Ensure we have CAP_KILL capability set on Linux, - * where we need this to communicate with threads. - * This is inherited by new threads, but not by new - * processes across exec(). - */ - set_effective_capability(KILL_CAPABILITY); - fault_setup((void (*)(void *))exit_server_fault); dump_core_setup("smbd"); |