1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <gtest/gtest.h> 18 19 #include "linkerconfig/apex.h" 20 #include "linkerconfig/baseconfig.h" 21 #include "linkerconfig/variables.h" 22 #include "testbase.h" 23 24 using android::linkerconfig::contents::Context; 25 using android::linkerconfig::modules::ApexInfo; 26 using android::linkerconfig::modules::AsanPath; 27 28 struct linkerconfig_default_backward_compatibility : ::testing::Test { 29 void SetUp() override { 30 MockVariables("Q"); 31 ApexInfo vndk_apex; 32 vndk_apex.name = "com.android.vndk.vQ"; 33 ctx.AddApexModule(vndk_apex); 34 } 35 Context ctx; 36 }; 37 38 TEST_F(linkerconfig_default_backward_compatibility, common_system_section) { 39 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx); 40 41 auto system_section = config.GetSection("system"); 42 ASSERT_TRUE(system_section); 43 44 auto default_namespace = system_section->GetNamespace("default"); 45 ASSERT_TRUE(default_namespace); 46 47 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/vendor/framework", 48 AsanPath::SAME_PATH)); 49 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/vendor/app", 50 AsanPath::SAME_PATH)); 51 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/vendor/priv-app", 52 AsanPath::SAME_PATH)); 53 ASSERT_TRUE(default_namespace->ContainsPermittedPath( 54 "/system/vendor/framework", AsanPath::SAME_PATH)); 55 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/system/vendor/app", 56 AsanPath::SAME_PATH)); 57 ASSERT_TRUE(default_namespace->ContainsPermittedPath( 58 "/system/vendor/priv-app", AsanPath::SAME_PATH)); 59 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/odm/framework", 60 AsanPath::SAME_PATH)); 61 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/odm/app", 62 AsanPath::SAME_PATH)); 63 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/odm/priv-app", 64 AsanPath::SAME_PATH)); 65 66 auto sphal_namespace = system_section->GetNamespace("sphal"); 67 ASSERT_TRUE(sphal_namespace); 68 69 ASSERT_TRUE(sphal_namespace->ContainsSearchPath("/odm/${LIB}", 70 AsanPath::WITH_DATA_ASAN)); 71 ASSERT_TRUE(sphal_namespace->ContainsSearchPath("/vendor/${LIB}", 72 AsanPath::WITH_DATA_ASAN)); 73 ASSERT_TRUE( 74 sphal_namespace->ContainsSearchPath("/vendor/${LIB}/hw", AsanPath::NONE)); 75 76 ASSERT_TRUE(sphal_namespace->ContainsPermittedPath("/odm/${LIB}", 77 AsanPath::WITH_DATA_ASAN)); 78 ASSERT_TRUE(sphal_namespace->ContainsPermittedPath("/vendor/${LIB}", 79 AsanPath::WITH_DATA_ASAN)); 80 ASSERT_TRUE(sphal_namespace->ContainsPermittedPath("/system/vendor/${LIB}", 81 AsanPath::NONE)); 82 83 auto rs_namespace = system_section->GetNamespace("rs"); 84 ASSERT_TRUE(rs_namespace); 85 86 ASSERT_TRUE(rs_namespace->ContainsSearchPath("/odm/${LIB}/vndk-sp", 87 AsanPath::WITH_DATA_ASAN)); 88 ASSERT_TRUE(rs_namespace->ContainsSearchPath("/vendor/${LIB}/vndk-sp", 89 AsanPath::WITH_DATA_ASAN)); 90 ASSERT_TRUE(rs_namespace->ContainsSearchPath("/odm/${LIB}", 91 AsanPath::WITH_DATA_ASAN)); 92 ASSERT_TRUE(rs_namespace->ContainsSearchPath("/vendor/${LIB}", 93 AsanPath::WITH_DATA_ASAN)); 94 95 ASSERT_TRUE(rs_namespace->ContainsPermittedPath("/odm/${LIB}", 96 AsanPath::WITH_DATA_ASAN)); 97 ASSERT_TRUE(rs_namespace->ContainsPermittedPath("/vendor/${LIB}", 98 AsanPath::WITH_DATA_ASAN)); 99 ASSERT_TRUE(rs_namespace->ContainsPermittedPath("/system/vendor/${LIB}", 100 AsanPath::NONE)); 101 102 auto vndk_namespace = system_section->GetNamespace("vndk"); 103 ASSERT_TRUE(vndk_namespace); 104 105 ASSERT_TRUE(vndk_namespace->ContainsSearchPath("/odm/${LIB}/vndk-sp", 106 AsanPath::WITH_DATA_ASAN)); 107 ASSERT_TRUE(vndk_namespace->ContainsSearchPath("/vendor/${LIB}/vndk-sp", 108 AsanPath::WITH_DATA_ASAN)); 109 110 ASSERT_TRUE(vndk_namespace->ContainsPermittedPath("/odm/${LIB}/hw", 111 AsanPath::WITH_DATA_ASAN)); 112 ASSERT_TRUE(vndk_namespace->ContainsPermittedPath("/odm/${LIB}/egl", 113 AsanPath::WITH_DATA_ASAN)); 114 ASSERT_TRUE(vndk_namespace->ContainsPermittedPath("/vendor/${LIB}/hw", 115 AsanPath::WITH_DATA_ASAN)); 116 ASSERT_TRUE(vndk_namespace->ContainsPermittedPath("/vendor/${LIB}/egl", 117 AsanPath::WITH_DATA_ASAN)); 118 } 119 120 TEST_F(linkerconfig_default_backward_compatibility, common_vendor_section) { 121 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx); 122 123 auto vendor_section = config.GetSection("vendor"); 124 ASSERT_TRUE(vendor_section); 125 126 auto default_namespace = vendor_section->GetNamespace("default"); 127 ASSERT_TRUE(default_namespace); 128 129 ASSERT_TRUE(default_namespace->ContainsSearchPath("/odm/${LIB}", 130 AsanPath::WITH_DATA_ASAN)); 131 ASSERT_TRUE(default_namespace->ContainsSearchPath("/vendor/${LIB}", 132 AsanPath::WITH_DATA_ASAN)); 133 ASSERT_TRUE(default_namespace->ContainsPermittedPath( 134 "/odm", AsanPath::WITH_DATA_ASAN)); 135 ASSERT_TRUE(default_namespace->ContainsPermittedPath( 136 "/vendor", AsanPath::WITH_DATA_ASAN)); 137 ASSERT_TRUE(default_namespace->ContainsPermittedPath("/system/vendor", 138 AsanPath::NONE)); 139 140 auto vndk_namespace = vendor_section->GetNamespace("vndk"); 141 ASSERT_TRUE(vndk_namespace); 142 143 ASSERT_TRUE(vndk_namespace->ContainsSearchPath("/odm/${LIB}/vndk", 144 AsanPath::WITH_DATA_ASAN)); 145 ASSERT_TRUE(vndk_namespace->ContainsSearchPath("/odm/${LIB}/vndk-sp", 146 AsanPath::WITH_DATA_ASAN)); 147 ASSERT_TRUE(vndk_namespace->ContainsSearchPath("/vendor/${LIB}/vndk", 148 AsanPath::WITH_DATA_ASAN)); 149 ASSERT_TRUE(vndk_namespace->ContainsSearchPath("/vendor/${LIB}/vndk-sp", 150 AsanPath::WITH_DATA_ASAN)); 151 } 152 153 TEST_F(linkerconfig_default_backward_compatibility, 154 common_unrestricted_section) { 155 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx); 156 157 auto unrestricted_section = config.GetSection("unrestricted"); 158 ASSERT_TRUE(unrestricted_section); 159 160 auto default_namespace = unrestricted_section->GetNamespace("default"); 161 ASSERT_TRUE(default_namespace); 162 163 ASSERT_TRUE(default_namespace->ContainsSearchPath("/odm/${LIB}", 164 AsanPath::WITH_DATA_ASAN)); 165 ASSERT_TRUE(default_namespace->ContainsSearchPath("/vendor/${LIB}", 166 AsanPath::WITH_DATA_ASAN)); 167 } 168 169 TEST_F(linkerconfig_default_backward_compatibility, vndk_27) { 170 android::linkerconfig::modules::Variables::AddValue("ro.vndk.version", "27"); 171 172 auto config = android::linkerconfig::contents::CreateBaseConfiguration(ctx); 173 174 auto vendor_section = config.GetSection("vendor"); 175 ASSERT_TRUE(vendor_section); 176 177 auto default_namespace = vendor_section->GetNamespace("default"); 178 ASSERT_TRUE(default_namespace); 179 180 ASSERT_TRUE(default_namespace->ContainsSearchPath("/vendor/${LIB}/hw", 181 AsanPath::WITH_DATA_ASAN)); 182 ASSERT_TRUE(default_namespace->ContainsSearchPath("/vendor/${LIB}/egl", 183 AsanPath::WITH_DATA_ASAN)); 184 } 185