From bb4beafe47aa8c97eaa5f4fb25a91ca0a798ddf4 Mon Sep 17 00:00:00 2001 From: Aaron Ding Date: Wed, 19 May 2021 13:18:49 +0800 Subject: Create gs201 device folder baseline clone from gs101 sha 9d1c97c2 Bug: 183183095 Change-Id: Ie7112bdf0aceb33c9e1956aa52e961b670582733 --- keymaster/Android.bp | 40 +++++++++++++++++++++++++++ keymaster/wait_for_strongbox.cpp | 59 ++++++++++++++++++++++++++++++++++++++++ keymaster/wait_for_strongbox.rc | 9 ++++++ 3 files changed, 108 insertions(+) create mode 100644 keymaster/Android.bp create mode 100644 keymaster/wait_for_strongbox.cpp create mode 100644 keymaster/wait_for_strongbox.rc (limited to 'keymaster') diff --git a/keymaster/Android.bp b/keymaster/Android.bp new file mode 100644 index 0000000..99aa4b4 --- /dev/null +++ b/keymaster/Android.bp @@ -0,0 +1,40 @@ +// +// 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. + +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "//device/google/gs101:device_google_gs101_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: [ + "//device/google/gs101:device_google_gs101_license", + ], +} + +cc_binary { + name: "wait_for_strongbox", + init_rc: ["wait_for_strongbox.rc"], + relative_install_path: "hw", + srcs: [ "wait_for_strongbox.cpp" ], + cflags: [ "-Werror", "-Wall" ], + shared_libs: [ + "android.hardware.keymaster@4.0", + "libbase", + "libkeymaster4_1support", + "libutils", + ], + proprietary: true, +} diff --git a/keymaster/wait_for_strongbox.cpp b/keymaster/wait_for_strongbox.cpp new file mode 100644 index 0000000..c0f4094 --- /dev/null +++ b/keymaster/wait_for_strongbox.cpp @@ -0,0 +1,59 @@ +/* + ** Copyright 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. + */ + +#include + +#define LOG_TAG "wait_for_strongbox" +#include + +#include + +using android::hardware::keymaster::V4_1::SecurityLevel; +using android::hardware::keymaster::V4_1::support::Keymaster; + +useconds_t kWaitTimeMicroseconds = 1 * 1000; // 1 milliseconds + +int main() { + for (unsigned cycleCount = 0; /* Forever */; ++cycleCount) { + auto keymasters = Keymaster::enumerateAvailableDevices(); + + bool foundStrongBox = false; + bool foundTee = false; + for (auto &dev : keymasters) { + SecurityLevel securityLevel = dev->halVersion().securityLevel; + uint8_t majorVersion = dev->halVersion().majorVersion; + if (securityLevel == SecurityLevel::STRONGBOX && majorVersion == 4) { + foundStrongBox = true; + } + if (securityLevel == SecurityLevel::TRUSTED_ENVIRONMENT && majorVersion == 4) { + foundTee = true; + } + } + + if (foundTee && foundStrongBox) { + return 0; + } + if (cycleCount % 10 == 1) { + if (!foundStrongBox) { + LOG(WARNING) << "Still waiting for StrongBox Keymaster"; + } + if (!foundTee) { + LOG(WARNING) << "Still waiting for TEE Keymaster"; + } + } + usleep(kWaitTimeMicroseconds); + } +} diff --git a/keymaster/wait_for_strongbox.rc b/keymaster/wait_for_strongbox.rc new file mode 100644 index 0000000..c02fc46 --- /dev/null +++ b/keymaster/wait_for_strongbox.rc @@ -0,0 +1,9 @@ +# Wait for both Trusty and Strongbox HALs to be up +service wait_for_strongbox /vendor/bin/hw/wait_for_strongbox + user root + group root system + priority -20 + ioprio rt 0 + +on late-fs + exec_start wait_for_strongbox -- cgit v1.2.3