Add check_builtins to libinit_host
This requires a bit of refactoring: moving things around. libinit_host is used by host_apex_verifier which needs check_builtins as well. Bug: 325565247 Test: atest host-apex-verifier Test: m out/target/product/vsoc_x86_64/host_init_verifier_output.txt Change-Id: Ifed54dd2149afbab2bf63f7e42c410c2354895fc
This commit is contained in:
parent
1242da780f
commit
39e8be43eb
5 changed files with 36 additions and 51 deletions
|
|
@ -88,7 +88,6 @@ init_device_sources = [
|
||||||
init_host_sources = [
|
init_host_sources = [
|
||||||
"check_builtins.cpp",
|
"check_builtins.cpp",
|
||||||
"host_import_parser.cpp",
|
"host_import_parser.cpp",
|
||||||
"host_init_verifier.cpp",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
soong_config_module_type {
|
soong_config_module_type {
|
||||||
|
|
@ -321,7 +320,6 @@ cc_binary {
|
||||||
visibility: ["//packages/modules/Virtualization/microdroid"],
|
visibility: ["//packages/modules/Virtualization/microdroid"],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
soong_config_module_type {
|
soong_config_module_type {
|
||||||
name: "init_first_stage_cc_defaults",
|
name: "init_first_stage_cc_defaults",
|
||||||
module_type: "cc_defaults",
|
module_type: "cc_defaults",
|
||||||
|
|
@ -614,13 +612,13 @@ cc_defaults {
|
||||||
cc_binary {
|
cc_binary {
|
||||||
name: "host_init_verifier",
|
name: "host_init_verifier",
|
||||||
defaults: ["init_host_defaults"],
|
defaults: ["init_host_defaults"],
|
||||||
srcs: init_common_sources + init_host_sources,
|
srcs: ["host_init_verifier.cpp"] + init_common_sources + init_host_sources,
|
||||||
}
|
}
|
||||||
|
|
||||||
cc_library_host_static {
|
cc_library_host_static {
|
||||||
name: "libinit_host",
|
name: "libinit_host",
|
||||||
defaults: ["init_host_defaults"],
|
defaults: ["init_host_defaults"],
|
||||||
srcs: init_common_sources,
|
srcs: init_common_sources + init_host_sources,
|
||||||
export_include_dirs: ["."],
|
export_include_dirs: ["."],
|
||||||
proto: {
|
proto: {
|
||||||
export_proto_headers: true,
|
export_proto_headers: true,
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@
|
||||||
#include <android-base/parsedouble.h>
|
#include <android-base/parsedouble.h>
|
||||||
#include <android-base/parseint.h>
|
#include <android-base/parseint.h>
|
||||||
#include <android-base/strings.h>
|
#include <android-base/strings.h>
|
||||||
|
#include <property_info_parser/property_info_parser.h>
|
||||||
|
|
||||||
#include "builtin_arguments.h"
|
#include "builtin_arguments.h"
|
||||||
#include "host_init_verifier.h"
|
|
||||||
#include "interface_utils.h"
|
#include "interface_utils.h"
|
||||||
#include "property_type.h"
|
#include "property_type.h"
|
||||||
#include "rlimit_parser.h"
|
#include "rlimit_parser.h"
|
||||||
|
|
@ -39,6 +39,9 @@
|
||||||
|
|
||||||
using android::base::ParseInt;
|
using android::base::ParseInt;
|
||||||
using android::base::StartsWith;
|
using android::base::StartsWith;
|
||||||
|
using android::properties::BuildTrie;
|
||||||
|
using android::properties::PropertyInfoArea;
|
||||||
|
using android::properties::PropertyInfoEntry;
|
||||||
|
|
||||||
#define ReturnIfAnyArgsEmpty() \
|
#define ReturnIfAnyArgsEmpty() \
|
||||||
for (const auto& arg : args) { \
|
for (const auto& arg : args) { \
|
||||||
|
|
@ -50,6 +53,26 @@ using android::base::StartsWith;
|
||||||
namespace android {
|
namespace android {
|
||||||
namespace init {
|
namespace init {
|
||||||
|
|
||||||
|
const PropertyInfoArea* property_info_area;
|
||||||
|
|
||||||
|
Result<void> InitializeHostPropertyInfoArea(const std::vector<PropertyInfoEntry>& property_infos) {
|
||||||
|
static std::string serialized_contexts;
|
||||||
|
std::string trie_error;
|
||||||
|
if (!BuildTrie(property_infos, "u:object_r:default_prop:s0", "string", &serialized_contexts,
|
||||||
|
&trie_error)) {
|
||||||
|
return Error() << "Unable to serialize property contexts: " << trie_error;
|
||||||
|
}
|
||||||
|
|
||||||
|
property_info_area = reinterpret_cast<const PropertyInfoArea*>(serialized_contexts.c_str());
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
static Result<void> check_stub(const BuiltinArguments& args) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "generated_stub_builtin_function_map.h"
|
||||||
|
|
||||||
Result<void> check_chown(const BuiltinArguments& args) {
|
Result<void> check_chown(const BuiltinArguments& args) {
|
||||||
if (!args[1].empty()) {
|
if (!args[1].empty()) {
|
||||||
auto uid = DecodeUid(args[1]);
|
auto uid = DecodeUid(args[1]);
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,10 @@
|
||||||
#include "builtin_arguments.h"
|
#include "builtin_arguments.h"
|
||||||
#include "result.h"
|
#include "result.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <property_info_serializer/property_info_serializer.h>
|
||||||
|
|
||||||
namespace android {
|
namespace android {
|
||||||
namespace init {
|
namespace init {
|
||||||
|
|
||||||
|
|
@ -43,5 +47,8 @@ Result<void> check_umount_all(const BuiltinArguments& args);
|
||||||
Result<void> check_wait(const BuiltinArguments& args);
|
Result<void> check_wait(const BuiltinArguments& args);
|
||||||
Result<void> check_wait_for_prop(const BuiltinArguments& args);
|
Result<void> check_wait_for_prop(const BuiltinArguments& args);
|
||||||
|
|
||||||
|
Result<void> InitializeHostPropertyInfoArea(
|
||||||
|
const std::vector<properties::PropertyInfoEntry>& property_infos);
|
||||||
|
|
||||||
} // namespace init
|
} // namespace init
|
||||||
} // namespace android
|
} // namespace android
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,6 @@
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "host_init_verifier.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
@ -36,6 +34,7 @@
|
||||||
#include <android-base/strings.h>
|
#include <android-base/strings.h>
|
||||||
#include <generated_android_ids.h>
|
#include <generated_android_ids.h>
|
||||||
#include <hidl/metadata.h>
|
#include <hidl/metadata.h>
|
||||||
|
#include <property_info_parser/property_info_parser.h>
|
||||||
#include <property_info_serializer/property_info_serializer.h>
|
#include <property_info_serializer/property_info_serializer.h>
|
||||||
|
|
||||||
#include "action.h"
|
#include "action.h"
|
||||||
|
|
@ -57,9 +56,7 @@ using android::base::EndsWith;
|
||||||
using android::base::ParseInt;
|
using android::base::ParseInt;
|
||||||
using android::base::ReadFileToString;
|
using android::base::ReadFileToString;
|
||||||
using android::base::Split;
|
using android::base::Split;
|
||||||
using android::properties::BuildTrie;
|
|
||||||
using android::properties::ParsePropertyInfoFile;
|
using android::properties::ParsePropertyInfoFile;
|
||||||
using android::properties::PropertyInfoArea;
|
|
||||||
using android::properties::PropertyInfoEntry;
|
using android::properties::PropertyInfoEntry;
|
||||||
|
|
||||||
static std::vector<std::string> passwd_files;
|
static std::vector<std::string> passwd_files;
|
||||||
|
|
@ -148,12 +145,6 @@ passwd* getpwnam(const char* login) { // NOLINT: implementing bad function.
|
||||||
namespace android {
|
namespace android {
|
||||||
namespace init {
|
namespace init {
|
||||||
|
|
||||||
static Result<void> check_stub(const BuiltinArguments& args) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "generated_stub_builtin_function_map.h"
|
|
||||||
|
|
||||||
void PrintUsage() {
|
void PrintUsage() {
|
||||||
fprintf(stdout, R"(usage: host_init_verifier [options]
|
fprintf(stdout, R"(usage: host_init_verifier [options]
|
||||||
|
|
||||||
|
|
@ -196,8 +187,6 @@ Result<InterfaceInheritanceHierarchyMap> ReadInterfaceInheritanceHierarchy() {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
const PropertyInfoArea* property_info_area;
|
|
||||||
|
|
||||||
void HandlePropertyContexts(const std::string& filename,
|
void HandlePropertyContexts(const std::string& filename,
|
||||||
std::vector<PropertyInfoEntry>* property_infos) {
|
std::vector<PropertyInfoEntry>* property_infos) {
|
||||||
auto file_contents = std::string();
|
auto file_contents = std::string();
|
||||||
|
|
@ -288,16 +277,11 @@ int main(int argc, char** argv) {
|
||||||
}
|
}
|
||||||
SetKnownInterfaces(*interface_inheritance_hierarchy_map);
|
SetKnownInterfaces(*interface_inheritance_hierarchy_map);
|
||||||
|
|
||||||
std::string serialized_contexts;
|
if (auto result = InitializeHostPropertyInfoArea(property_infos); !result.ok()) {
|
||||||
std::string trie_error;
|
LOG(ERROR) << result.error();
|
||||||
if (!BuildTrie(property_infos, "u:object_r:default_prop:s0", "string", &serialized_contexts,
|
|
||||||
&trie_error)) {
|
|
||||||
LOG(ERROR) << "Unable to serialize property contexts: " << trie_error;
|
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
property_info_area = reinterpret_cast<const PropertyInfoArea*>(serialized_contexts.c_str());
|
|
||||||
|
|
||||||
if (!partition_map.empty()) {
|
if (!partition_map.empty()) {
|
||||||
std::vector<std::string> vendor_prefixes;
|
std::vector<std::string> vendor_prefixes;
|
||||||
for (const auto& partition : {"vendor", "odm"}) {
|
for (const auto& partition : {"vendor", "odm"}) {
|
||||||
|
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2019 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <property_info_parser/property_info_parser.h>
|
|
||||||
|
|
||||||
namespace android {
|
|
||||||
namespace init {
|
|
||||||
|
|
||||||
extern const android::properties::PropertyInfoArea* property_info_area;
|
|
||||||
|
|
||||||
} // namespace init
|
|
||||||
} // namespace android
|
|
||||||
Loading…
Add table
Reference in a new issue