blob: 9cc0ae88f373082695fce52e90e1632eff558b34 [file] [log] [blame]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef INIT_UTILS_H_
#define INIT_UTILS_H_
#include <string>
#include <vector>
#include <base/files/file.h>
#include <base/files/file_path.h>
namespace utils {
// Try to set root to the root device filepath, optionally removing the
// partition number
bool GetRootDevice(base::FilePath* root, bool strip_partition);
// Helper function to read a file to int
bool ReadFileToInt(const base::FilePath& path, int* value);
// Run encrypted-reboot-vault --action=create
bool CreateEncryptedRebootVault();
// Run encrypted-reboot-vault --action=unlock
bool UnlockEncryptedRebootVault();
// Run shutdown.
void Reboot();
void Restorecon(const base::FilePath& path,
const std::vector<base::FilePath>& exclude,
bool is_recursive,
bool set_digests);
// Searches `drive_name` for the partition labeled `partition_label` and
// returns its partition number if exactly one partition was found. Returns
// -1 on error.
int GetPartitionNumber(const base::FilePath& drive_name,
const std::string& partition_label);
// Reads successful and priority metadata from partition numbered
// `partition_number` on `disk`, storing the results in `successful_out` and
// `priority_out`, respectively. Returns true on success.
//
// successful is a 1 bit value indicating if a kernel partition
// has been successfully booted, while priority is a 4 bit value
// indicating what order the kernel partitions should be booted in, 15 being
// the highest, 1 the lowest, and 0 meaning not bootable.
// More information on partition metadata is available at.
// https://www.chromium.org/chromium-os/chromiumos-design-docs/disk-format
bool ReadPartitionMetadata(const base::FilePath& disk,
int partition_number,
bool* successful_out,
int* priority_out);
// Make sure the kernel partition numbered `kernel_partition` is still
// bootable after being wiped. The system may be in AU state that active
// kernel does not have "successful" bit set to 1, but the kernel has been
// successfully booted.
void EnsureKernelIsBootable(const base::FilePath root_disk,
int kernel_partition);
} // namespace utils
#endif // INIT_UTILS_H_