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

Commit 775fe090 authored by android-build-team Robot's avatar android-build-team Robot
Browse files

Snap for 6504394 from 59e0da72 to mainline-release

Change-Id: I2f2e19bcdf72123022fcddf056f249cfd4547c9d
parents e877b3cd 59e0da72
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ cc_binary {
    ],

    header_libs: [
        "avb_headers",
        "libsnapshot_headers",
    ]
}
+29 −1
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
#include <ext4_utils/ext4_utils.h>
#include <fs_mgr_overlayfs.h>
#include <fstab/fstab.h>
#include <libavb/libavb.h>
#include <liblp/builder.h>
#include <liblp/liblp.h>
#include <libsnapshot/snapshot.h>
@@ -122,6 +123,27 @@ int FlashBlockDevice(int fd, std::vector<char>& downloaded_data) {
    }
}

static void CopyAVBFooter(std::vector<char>* data, const uint64_t block_device_size) {
    if (data->size() < AVB_FOOTER_SIZE) {
        return;
    }
    std::string footer;
    uint64_t footer_offset = data->size() - AVB_FOOTER_SIZE;
    for (int idx = 0; idx < AVB_FOOTER_MAGIC_LEN; idx++) {
        footer.push_back(data->at(footer_offset + idx));
    }
    if (0 != footer.compare(AVB_FOOTER_MAGIC)) {
        return;
    }

    // copy AVB footer from end of data to end of block device
    uint64_t original_data_size = data->size();
    data->resize(block_device_size, 0);
    for (int idx = 0; idx < AVB_FOOTER_SIZE; idx++) {
        data->at(block_device_size - 1 - idx) = data->at(original_data_size - 1 - idx);
    }
}

int Flash(FastbootDevice* device, const std::string& partition_name) {
    PartitionHandle handle;
    if (!OpenPartition(device, partition_name, &handle)) {
@@ -131,8 +153,14 @@ int Flash(FastbootDevice* device, const std::string& partition_name) {
    std::vector<char> data = std::move(device->download_data());
    if (data.size() == 0) {
        return -EINVAL;
    } else if (data.size() > get_block_device_size(handle.fd())) {
    }
    uint64_t block_device_size = get_block_device_size(handle.fd());
    if (data.size() > block_device_size) {
        return -EOVERFLOW;
    } else if (data.size() < block_device_size &&
               (partition_name == "boot" || partition_name == "boot_a" ||
                partition_name == "boot_b")) {
        CopyAVBFooter(&data, block_device_size);
    }
    WipeOverlayfsForPartition(device, partition_name);
    return FlashBlockDevice(handle.fd(), data);
+6 −0
Original line number Diff line number Diff line
@@ -51,6 +51,12 @@ cc_library {
            enabled: false,
        },
    },

    apex_available: [
        "//apex_available:platform",
        "com.android.art.debug",
        "com.android.art.release",
    ],
}

// Tests
+6 −0
Original line number Diff line number Diff line
@@ -135,6 +135,12 @@ cc_library {
            exclude_shared_libs: ["libdexfile_support"],
        },
    },

    apex_available: [
        "//apex_available:platform",
        "com.android.art.debug",
        "com.android.art.release",
    ],
}

// Static library without DEX support to avoid dependencies on the ART APEX.
+6 −0
Original line number Diff line number Diff line
@@ -109,6 +109,12 @@ cc_library {
            enabled: true,
        },
    },

    apex_available: [
        "//apex_available:platform",
        "com.android.art.debug",
        "com.android.art.release",
    ],
}

// Tests.