Snap for 4740273 from 766a410388 to qt-release

Change-Id: I7118415a5a1a2db62790556336b922ea9c7016f9
This commit is contained in:
android-build-team Robot
2018-04-24 09:30:38 +00:00
6 changed files with 105 additions and 118 deletions
-1
View File
@@ -215,4 +215,3 @@ include \
$(LOCAL_PATH)/tests/Android.mk \
$(LOCAL_PATH)/tools/Android.mk \
$(LOCAL_PATH)/updater/Android.mk \
$(LOCAL_PATH)/update_verifier/Android.mk \
-8
View File
@@ -74,14 +74,6 @@ ifeq ($(AB_OTA_UPDATER),true)
LOCAL_CFLAGS += -DAB_OTA_UPDATER=1
endif
ifeq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),true)
LOCAL_CFLAGS += -DPRODUCT_SUPPORTS_VERITY=1
endif
ifeq ($(BOARD_AVB_ENABLE),true)
LOCAL_CFLAGS += -DBOARD_AVB_ENABLE=1
endif
LOCAL_MODULE := recovery_component_test
LOCAL_COMPATIBILITY_SUITE := device-tests
LOCAL_C_INCLUDES := bootable/recovery
+4 -5
View File
@@ -17,6 +17,8 @@
#include <string>
#include <android-base/file.h>
#include <android-base/properties.h>
#include <android-base/strings.h>
#include <android-base/test_utils.h>
#include <gtest/gtest.h>
#include <update_verifier/update_verifier.h>
@@ -24,11 +26,8 @@
class UpdateVerifierTest : public ::testing::Test {
protected:
void SetUp() override {
#if defined(PRODUCT_SUPPORTS_VERITY) || defined(BOARD_AVB_ENABLE)
verity_supported = true;
#else
verity_supported = false;
#endif
std::string verity_mode = android::base::GetProperty("ro.boot.veritymode", "");
verity_supported = android::base::EqualsIgnoreCase(verity_mode, "enforcing");
}
bool verity_supported;
+83
View File
@@ -0,0 +1,83 @@
// Copyright (C) 2018 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
cc_defaults {
name: "update_verifier_defaults",
cflags: [
"-Wall",
"-Werror",
],
local_include_dirs: [
"include",
],
}
cc_library_static {
name: "libupdate_verifier",
defaults: [
"update_verifier_defaults",
],
srcs: [
"update_verifier.cpp",
],
export_include_dirs: [
"include",
],
static_libs: [
"libotautil",
],
shared_libs: [
"android.hardware.boot@1.0",
"libbase",
"libcutils",
],
}
cc_binary {
name: "update_verifier",
defaults: [
"update_verifier_defaults",
],
srcs: [
"update_verifier_main.cpp",
],
static_libs: [
"libupdate_verifier",
"libotautil",
],
shared_libs: [
"android.hardware.boot@1.0",
"libbase",
"libcutils",
"libhardware",
"libhidlbase",
"liblog",
"libutils",
],
init_rc: [
"update_verifier.rc",
],
}
-77
View File
@@ -1,77 +0,0 @@
# Copyright (C) 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
LOCAL_PATH := $(call my-dir)
# libupdate_verifier (static library)
# ===============================
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
update_verifier.cpp
LOCAL_MODULE := libupdate_verifier
LOCAL_STATIC_LIBRARIES := \
libotautil
LOCAL_SHARED_LIBRARIES := \
libbase \
libcutils \
android.hardware.boot@1.0
LOCAL_CFLAGS := -Wall -Werror
LOCAL_EXPORT_C_INCLUDE_DIRS := \
$(LOCAL_PATH)/include
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/include
ifeq ($(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VERITY),true)
LOCAL_CFLAGS += -DPRODUCT_SUPPORTS_VERITY=1
endif
ifeq ($(BOARD_AVB_ENABLE),true)
LOCAL_CFLAGS += -DBOARD_AVB_ENABLE=1
endif
include $(BUILD_STATIC_LIBRARY)
# update_verifier (executable)
# ===============================
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
update_verifier_main.cpp
LOCAL_MODULE := update_verifier
LOCAL_STATIC_LIBRARIES := \
libupdate_verifier \
libotautil
LOCAL_SHARED_LIBRARIES := \
libbase \
libcutils \
libhardware \
liblog \
libutils \
libhidlbase \
android.hardware.boot@1.0
LOCAL_CFLAGS := -Wall -Werror
LOCAL_INIT_RC := update_verifier.rc
include $(BUILD_EXECUTABLE)
+18 -27
View File
@@ -15,24 +15,26 @@
*/
/*
* This program verifies the integrity of the partitions after an A/B OTA
* update. It gets invoked by init, and will only perform the verification if
* it's the first boot post an A/B OTA update.
* update_verifier verifies the integrity of the partitions after an A/B OTA update. It gets invoked
* by init, and will only perform the verification if it's the first boot post an A/B OTA update
* (https://source.android.com/devices/tech/ota/ab/#after_reboot).
*
* Update_verifier relies on dm-verity to capture any corruption on the partitions
* being verified. And its behavior varies depending on the dm-verity mode.
* Upon detection of failures:
* update_verifier relies on device-mapper-verity (dm-verity) to capture any corruption on the
* partitions being verified (https://source.android.com/security/verifiedboot). The verification
* will be skipped, if dm-verity is not enabled on the device.
*
* Upon detecting verification failures, the device will be rebooted, although the trigger of the
* reboot depends on the dm-verity mode.
* enforcing mode: dm-verity reboots the device
* eio mode: dm-verity fails the read and update_verifier reboots the device
* other mode: not supported and update_verifier reboots the device
*
* After a predefined number of failing boot attempts, the bootloader should
* mark the slot as unbootable and stops trying. Other dm-verity modes (
* for example, veritymode=EIO) are not accepted and simply lead to a
* verification failure.
* All these reboots prevent the device from booting into a known corrupt state. If the device
* continuously fails to boot into the new slot, the bootloader should mark the slot as unbootable
* and trigger a fallback to the old slot.
*
* The current slot will be marked as having booted successfully if the
* verifier reaches the end after the verification.
* The current slot will be marked as having booted successfully if the verifier reaches the end
* after the verification.
*/
#include "update_verifier/update_verifier.h"
@@ -103,12 +105,10 @@ static bool read_blocks(const std::string& partition, const std::string& range_s
PLOG(WARNING) << "Failed to read " << path;
} else {
std::string dm_block_name = android::base::Trim(content);
#ifdef BOARD_AVB_ENABLE
// AVB is using 'vroot' for the root block device but we're expecting 'system'.
if (dm_block_name == "vroot") {
dm_block_name = "system";
}
#endif
if (dm_block_name == partition) {
dm_block_device = DEV_PATH + std::string(namelist[n]->d_name);
while (n--) {
@@ -264,19 +264,13 @@ int update_verifier(int argc, char** argv) {
if (is_successful == BoolResult::FALSE) {
// The current slot has not booted successfully.
#if defined(PRODUCT_SUPPORTS_VERITY) || defined(BOARD_AVB_ENABLE)
bool skip_verification = false;
std::string verity_mode = android::base::GetProperty("ro.boot.veritymode", "");
if (verity_mode.empty()) {
// With AVB it's possible to disable verification entirely and
// in this case ro.boot.veritymode is empty.
#if defined(BOARD_AVB_ENABLE)
LOG(WARNING) << "verification has been disabled; marking without verification.";
// Skip the verification if ro.boot.veritymode property is not set. This could be a result
// that device doesn't support dm-verity, or has disabled that.
LOG(WARNING) << "dm-verity not enabled; marking without verification.";
skip_verification = true;
#else
LOG(ERROR) << "Failed to get dm-verity mode.";
return reboot_device();
#endif
} else if (android::base::EqualsIgnoreCase(verity_mode, "eio")) {
// We shouldn't see verity in EIO mode if the current slot hasn't booted successfully before.
// Continue the verification until we fail to read some blocks.
@@ -285,7 +279,7 @@ int update_verifier(int argc, char** argv) {
LOG(WARNING) << "dm-verity in disabled mode; marking without verification.";
skip_verification = true;
} else if (verity_mode != "enforcing") {
LOG(ERROR) << "Unexpected dm-verity mode : " << verity_mode << ", expecting enforcing.";
LOG(ERROR) << "Unexpected dm-verity mode: " << verity_mode << ", expecting enforcing.";
return reboot_device();
}
@@ -296,9 +290,6 @@ int update_verifier(int argc, char** argv) {
return reboot_device();
}
}
#else
LOG(WARNING) << "dm-verity not enabled; marking without verification.";
#endif
CommandResult cr;
module->markBootSuccessful([&cr](CommandResult result) { cr = result; });