From 8968b33f196076176ddb26954514694cb321bed1 Mon Sep 17 00:00:00 2001 From: Tim Zimmermann Date: Tue, 20 Jul 2021 19:45:01 +0530 Subject: [PATCH] universal7885: Assert on firmware version * <= Pie firmwares aren't supported Change-Id: Ibe4ba20f05141c5bf0726f4f4a5a6c0cc5672e29 Signed-off-by: SamarV-121 --- BoardConfigCommon.mk | 7 +++++ board-info.txt | 1 + recovery/Android.bp | 28 +++++++++++++++++++ recovery/recovery_updater.cpp | 51 +++++++++++++++++++++++++++++++++++ releasetools.py | 26 ++++++++++++++++++ 5 files changed, 113 insertions(+) create mode 100644 board-info.txt create mode 100644 recovery/Android.bp create mode 100644 recovery/recovery_updater.cpp create mode 100644 releasetools.py diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk index 76eebc1..7753f4c 100644 --- a/BoardConfigCommon.mk +++ b/BoardConfigCommon.mk @@ -24,6 +24,9 @@ TARGET_2ND_CPU_ABI2 := armeabi TARGET_2ND_CPU_VARIANT := generic TARGET_2ND_CPU_VARIANT_RUNTIME := cortex-a53 +# Board +TARGET_BOARD_INFO_FILE := $(COMMON_PATH)/board-info.txt + # Bluetooth BOARD_BLUETOOTH_BDROID_BUILDCFG_INCLUDE_DIR := $(COMMON_PATH)/bluetooth BOARD_HAVE_BLUETOOTH_SLSI := true @@ -79,6 +82,10 @@ TARGET_VENDOR_PROP += $(COMMON_PATH)/vendor.prop # Recovery BOARD_HAS_DOWNLOAD_MODE := true +# Releasetools +TARGET_RECOVERY_UPDATER_LIBS := librecovery_updater_universal7904 +TARGET_RELEASETOOLS_EXTENSIONS := $(COMMON_PATH) + # Sepolicy include device/lineage/sepolicy/exynos/sepolicy.mk include device/samsung_slsi/sepolicy/sepolicy.mk diff --git a/board-info.txt b/board-info.txt new file mode 100644 index 0000000..05cef84 --- /dev/null +++ b/board-info.txt @@ -0,0 +1 @@ +require version-bootloader-min=C diff --git a/recovery/Android.bp b/recovery/Android.bp new file mode 100644 index 0000000..04602c2 --- /dev/null +++ b/recovery/Android.bp @@ -0,0 +1,28 @@ +// +// Copyright (C) 2021 The LineageOS 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_library_static { + name: "librecovery_updater_universal7904", + srcs: [ + "recovery_updater.cpp", + ], + include_dirs: [ + "system/core/base/include", + "bootable/recovery", + "bootable/recovery/edify/include", + "bootable/recovery/otautil/include" + ], +} diff --git a/recovery/recovery_updater.cpp b/recovery/recovery_updater.cpp new file mode 100644 index 0000000..c1e522f --- /dev/null +++ b/recovery/recovery_updater.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2021, The LineageOS 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. + */ + +#include + +#include "edify/expr.h" +#include "otautil/error_code.h" + +Value *VerifyBootloader(const char *name, State *state, + const std::vector> &argv) { + int ret = 0; + std::string bootloader = android::base::GetProperty("ro.boot.bootloader", ""); + if (bootloader.empty()) { + return ErrorAbort(state, kFileGetPropFailure, + "%s() failed to read current bootloader version", name); + } + + std::string min_supported_bootloader_arg; + if (argv.empty() || !Evaluate(state, argv[0], &min_supported_bootloader_arg)) { + return ErrorAbort(state, kArgsParsingFailure, + "%s() error parsing arguments", name); + } + int min_supported_bootloader = int(min_supported_bootloader_arg[0]); + + int version = 0; + if (bootloader.length() >= 4) + version = int(bootloader[bootloader.length() - 4]); + + if (version >= min_supported_bootloader) { + ret = 1; + } + + return StringValue(std::to_string(ret)); +} + +void Register_librecovery_updater_universal7904() { + RegisterFunction("universal7904.verify_bootloader_min", VerifyBootloader); +} diff --git a/releasetools.py b/releasetools.py new file mode 100644 index 0000000..dc89f10 --- /dev/null +++ b/releasetools.py @@ -0,0 +1,26 @@ +#!/bin/env python3 +# +# Copyright (C) 2021 The LineageOS 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. + +import common +import re + +def FullOTA_Assertions(info): + android_info = info.input_zip.read("OTA/android-info.txt") + m = re.search(r'require\s+version-bootloader-min\s*=\s*(\S+)', android_info) + if m: + bootloader_version = m.group(1) + cmd = ('assert(universal7904.verify_bootloader_min("{}") == "1" || abort("ERROR: This package requires Android 10 or 11 based firmware. Please upgrade firmware and retry!"););').format(bootloader_version) + info.script.AppendExtra(cmd)