blob: 01a4bba0daaf1258e872d3bdfa6aa75c31848dae [file] [log] [blame]
// Copyright 2018 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <memory>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/logging.h>
#include <brillo/syslog_logging.h>
#include <libhwsec/factory/factory_impl.h>
#include <libhwsec/frontend/oobe_config/frontend.h>
#include <oobe_config/metrics/enterprise_rollback_metrics_handler.h>
#include "oobe_config/filesystem/file_handler.h"
namespace {
void InitLog() {
brillo::InitLog(brillo::kLogToSyslog | brillo::kLogToStderrIfTty);
logging::SetLogItems(/*enable_process_id=*/true, /*enable_thread_id=*/true,
/*enable_timestamp=*/true, /*enable_tickcount=*/true);
}
void ZeroTpmSpaceIfExists() {
auto hwsec_factory_ = std::make_unique<hwsec::FactoryImpl>();
std::unique_ptr<const hwsec::OobeConfigFrontend> hwsec_ =
hwsec_factory_->GetOobeConfigFrontend();
hwsec::Status space_ready = hwsec_->IsRollbackSpaceReady();
if (space_ready.ok()) {
hwsec::Status space_reset = hwsec_->ResetRollbackSpace();
if (!space_reset.ok()) {
LOG(ERROR) << space_reset.status();
// TODO(b/262235959): Report failure to reset rollback space.
}
} else if (space_ready->ToTPMRetryAction() ==
hwsec::TPMRetryAction::kSpaceNotFound) {
// Not finding space is expected, log as informational.
LOG(INFO) << space_ready.status();
} else {
LOG(ERROR) << space_ready.status();
}
}
} // namespace
// Deletes leftovers from a preceding enterprise rollback. Should be called
// only when the device is owned.
int main(int argc, char* argv[]) {
InitLog();
oobe_config::FileHandler file_handler;
file_handler.RemoveRestorePath();
// Only clean metrics file when encrypted rollback data is present, as that is
// a sign that a rollback process just finished. Otherwise we may be cleaning
// data too early.
if (file_handler.HasOpensslEncryptedRollbackData() ||
file_handler.HasTpmEncryptedRollbackData()) {
oobe_config::EnterpriseRollbackMetricsHandler metrics_handler;
if (metrics_handler.IsTrackingRollbackEvents()) {
metrics_handler.StopTrackingRollback();
}
}
file_handler.RemoveOpensslEncryptedRollbackData();
file_handler.RemoveTpmEncryptedRollbackData();
ZeroTpmSpaceIfExists();
return 0;
}