summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarolin Seeger <kseeger@samba.org>2010-03-08 20:34:39 +0100
committerKarolin Seeger <kseeger@samba.org>2010-03-08 20:34:39 +0100
commit1c9494c76cc9686c61e0966f38528d3318f3176f (patch)
treeef94287f736857592e3b8e215f3b29bc790f465e
parentcd499eaf0418fa0a3034c5ba4709278a302ea980 (diff)
downloadsamba-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.h3
-rw-r--r--source3/lib/system.c65
-rw-r--r--source3/smbd/server.c8
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");