]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
core: set dumpable flag after setuid 11582/head
authorPatrick Donnelly <pdonnell@redhat.com>
Wed, 19 Oct 2016 23:10:14 +0000 (19:10 -0400)
committerPatrick Donnelly <pdonnell@redhat.com>
Thu, 20 Oct 2016 18:19:06 +0000 (14:19 -0400)
When ceph-* drops drops privileges via setuid, core dumps are no longer
generated because its DUMPABLE flag is cleared. We have to manually
turn that back on.

From prctl(2):

      Normally, this flag is set to 1.  However, it is reset to the current value contained in the file /proc/sys/fs/suid_dumpable (which by default has the value 0), in the fol‐
      lowing circumstances:

      *  The process's effective user or group ID is changed.

      *  The process's filesystem user or group ID is changed (see credentials(7)).

      *  The process executes (execve(2)) a set-user-ID or set-group-ID program, or a program that has capabilities (see capabilities(7)).

Fixes: http://tracker.ceph.com/issues/17650
Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
src/global/global_init.cc

index 3a905c0b5763cf1c96fc1217a8241dc8a79b75e4..99c862e862f518d4a44d3de51e4b03238fff0b34 100644 (file)
 #include <grp.h>
 #include <errno.h>
 
+#ifdef HAVE_SYS_PRCTL_H
+#include <sys/prctl.h>
+#endif
+
 #define dout_subsys ceph_subsys_
 
 static void global_init_set_globals(CephContext *cct)
@@ -262,6 +266,12 @@ void global_init(std::vector < const char * > *alt_def_args,
     }
   }
 
+#if defined(HAVE_SYS_PRCTL_H)
+  if (prctl(PR_SET_DUMPABLE, 1) == -1) {
+    cerr << "warning: unable to set dumpable flag: " << cpp_strerror(errno) << std::endl;
+  }
+#endif
+
   // Expand metavariables. Invoke configuration observers. Open log file.
   g_conf->apply_changes(NULL);