blob: baf75d285278f48f16942a905eb5ea0171708a17 [file] [log] [blame]
// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <signal.h>
#include <sysexits.h>
#include <base/command_line.h>
#include <brillo/syslog_logging.h>
#include <libhwsec-foundation/profiling/profiling.h>
#include <libhwsec-foundation/tpm_error/tpm_error_uma_reporter.h>
#include "vtpm/commands/null_command.h"
#include "vtpm/commands/virtualizer.h"
#include "vtpm/vtpm_daemon.h"
void MaskSignals() {
sigset_t signal_mask;
CHECK_EQ(0, sigemptyset(&signal_mask));
for (int signal : {SIGTERM, SIGINT}) {
CHECK_EQ(0, sigaddset(&signal_mask, signal));
}
CHECK_EQ(0, sigprocmask(SIG_BLOCK, &signal_mask, nullptr));
}
int main(int argc, char* argv[]) {
base::CommandLine::Init(argc, argv);
base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
int flags = brillo::kLogToSyslog;
if (cl->HasSwitch("log_to_stderr")) {
flags |= brillo::kLogToStderr;
}
brillo::InitLog(flags);
// Mask signals handled by the daemon thread. This makes sure we
// won't handle shutdown signals on one of the other threads spawned
// below.
MaskSignals();
// Set TPM metrics client ID.
hwsec_foundation::SetTpmMetricsClientID(
hwsec_foundation::TpmMetricsClientID::kVtpm);
std::unique_ptr<vtpm::Command> vtpm =
vtpm::Virtualizer::Create(vtpm::Virtualizer::Profile::kGLinux);
// Start profiling.
hwsec_foundation::SetUpProfiling();
return vtpm::VtpmDaemon(vtpm.get()).Run();
}