Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea890047 authored by Jooyung Han's avatar Jooyung Han Committed by Automerger Merge Worker
Browse files

Unshare mount namespace in bootchart's thread am: 1f85546b

parents ab366cf9 1f85546b
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -140,6 +140,20 @@ static void log_processes(FILE* log) {
static void bootchart_thread_main() {
  LOG(INFO) << "Bootcharting started";

  // Unshare the mount namespace of this thread so that the init process itself can switch
  // the mount namespace later while this thread is still running.
  // Otherwise, setns() call invoked as part of `enter_default_mount_ns` fails with EINVAL.
  //
  // Note that after unshare()'ing the mount namespace from the main thread, this thread won't
  // receive mount/unmount events from the other mount namespace unless the events are happening
  // from under a sharable mount.
  //
  // The bootchart thread is safe to unshare the mount namespace because it only reads from /proc
  // and write to /data which are not private mounts.
  if (unshare(CLONE_NEWNS) == -1) {
      PLOG(ERROR) << "Cannot create mount namespace";
      return;
  }
  // Open log files.
  auto stat_log = fopen_unique("/data/bootchart/proc_stat.log", "we");
  if (!stat_log) return;