Consolidate the vendor space misc usage for Pixels
The layout of the vendor space /misc partition was pretty confusing and lead to some usage conflicts. To formalize the layout, we create a pixel specific library with the definition & offset of various flags. The new library also handles the R/W. As a result, we will leave system domain /misc definitions in the libbootloader_message. We also switch the misc_writer binary to use more specific options instead of writing an arbitrary hex string. So we can avoid redefining the string & offset in both init script and recovery ui. Bug: 131775112 Test: unit tests pass, run misc_writer and check contents of /misc Change-Id: I00f8842a81d1929e31a1de4d5eb09575ffad47c0
This commit is contained in:
@@ -45,7 +45,7 @@ void SetMiscBlockDeviceForTest(std::string_view misc_device) {
|
||||
g_misc_device_for_test = misc_device;
|
||||
}
|
||||
|
||||
static std::string get_misc_blk_device(std::string* err) {
|
||||
std::string get_misc_blk_device(std::string* err) {
|
||||
if (g_misc_device_for_test.has_value() && !g_misc_device_for_test->empty()) {
|
||||
return *g_misc_device_for_test;
|
||||
}
|
||||
@@ -111,8 +111,8 @@ static bool read_misc_partition(void* p, size_t size, const std::string& misc_bl
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool write_misc_partition(const void* p, size_t size, const std::string& misc_blk_device,
|
||||
size_t offset, std::string* err) {
|
||||
bool write_misc_partition(const void* p, size_t size, const std::string& misc_blk_device,
|
||||
size_t offset, std::string* err) {
|
||||
android::base::unique_fd fd(open(misc_blk_device.c_str(), O_WRONLY));
|
||||
if (fd == -1) {
|
||||
*err = android::base::StringPrintf("failed to open %s: %s", misc_blk_device.c_str(),
|
||||
@@ -261,37 +261,6 @@ bool write_wipe_package(const std::string& package_data, std::string* err) {
|
||||
WIPE_PACKAGE_OFFSET_IN_MISC, err);
|
||||
}
|
||||
|
||||
static bool OffsetAndSizeInVendorSpace(size_t offset, size_t size) {
|
||||
auto total_size = WIPE_PACKAGE_OFFSET_IN_MISC - VENDOR_SPACE_OFFSET_IN_MISC;
|
||||
return size <= total_size && offset <= total_size - size;
|
||||
}
|
||||
|
||||
bool ReadMiscPartitionVendorSpace(void* data, size_t size, size_t offset, std::string* err) {
|
||||
if (!OffsetAndSizeInVendorSpace(offset, size)) {
|
||||
*err = android::base::StringPrintf("Out of bound read (offset %zu size %zu)", offset, size);
|
||||
return false;
|
||||
}
|
||||
auto misc_blk_device = get_misc_blk_device(err);
|
||||
if (misc_blk_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
return read_misc_partition(data, size, misc_blk_device, VENDOR_SPACE_OFFSET_IN_MISC + offset,
|
||||
err);
|
||||
}
|
||||
|
||||
bool WriteMiscPartitionVendorSpace(const void* data, size_t size, size_t offset, std::string* err) {
|
||||
if (!OffsetAndSizeInVendorSpace(offset, size)) {
|
||||
*err = android::base::StringPrintf("Out of bound write (offset %zu size %zu)", offset, size);
|
||||
return false;
|
||||
}
|
||||
auto misc_blk_device = get_misc_blk_device(err);
|
||||
if (misc_blk_device.empty()) {
|
||||
return false;
|
||||
}
|
||||
return write_misc_partition(data, size, misc_blk_device, VENDOR_SPACE_OFFSET_IN_MISC + offset,
|
||||
err);
|
||||
}
|
||||
|
||||
static bool ValidateSystemSpaceRegion(size_t offset, size_t size, std::string* err) {
|
||||
if (size <= SYSTEM_SPACE_SIZE_IN_MISC && offset <= (SYSTEM_SPACE_SIZE_IN_MISC - size)) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user