hiddenapi: Introduce greylist-max-p
Add a new hiddenapi::ApiList constant for a greylist only accessible to
apps targeting SDK version < Q.
The patch also removes SdkVersion::kP_MR1 which is invalid.
Test: m, phone boots
Test: m test-art
Test: atest art/tools/class2greylist/test
Change-Id: I48f3d1a4703166168fd8e0d1c3337aa2957b66ce
diff --git a/libartbase/base/hiddenapi_flags.h b/libartbase/base/hiddenapi_flags.h
index 9ea01d7..8c1ffd5 100644
--- a/libartbase/base/hiddenapi_flags.h
+++ b/libartbase/base/hiddenapi_flags.h
@@ -44,11 +44,12 @@
// The max release code implicitly includes all maintenance releases,
// e.g. GreylistMaxO is accessible to targetSdkVersion <= 27 (O_MR1).
kGreylistMaxO = 3,
+ kGreylistMaxP = 4,
// Special values
kInvalid = static_cast<uint32_t>(-1),
kMinValue = kWhitelist,
- kMaxValue = kGreylistMaxO,
+ kMaxValue = kGreylistMaxP,
};
static constexpr const char* kNames[] = {
@@ -56,6 +57,7 @@
"greylist",
"blacklist",
"greylist-max-o",
+ "greylist-max-p",
};
static constexpr const char* kInvalidName = "invalid";
@@ -65,6 +67,7 @@
/* greylist */ SdkVersion::kMax,
/* blacklist */ SdkVersion::kMin,
/* greylist-max-o */ SdkVersion::kO_MR1,
+ /* greylist-max-p */ SdkVersion::kP,
};
static ApiList MinValue() { return ApiList(Value::kMinValue); }
@@ -79,6 +82,7 @@
static ApiList Greylist() { return ApiList(Value::kGreylist); }
static ApiList Blacklist() { return ApiList(Value::kBlacklist); }
static ApiList GreylistMaxO() { return ApiList(Value::kGreylistMaxO); }
+ static ApiList GreylistMaxP() { return ApiList(Value::kGreylistMaxP); }
static ApiList Invalid() { return ApiList(Value::kInvalid); }
// Decodes ApiList from dex hiddenapi flags.
diff --git a/libartbase/base/sdk_version.h b/libartbase/base/sdk_version.h
index 4372e5a..e2dbc50 100644
--- a/libartbase/base/sdk_version.h
+++ b/libartbase/base/sdk_version.h
@@ -33,7 +33,6 @@
kO = 26u,
kO_MR1 = 27u,
kP = 28u,
- kP_MR1 = 29u,
kMax = std::numeric_limits<uint32_t>::max(),
};
diff --git a/runtime/hidden_api_test.cc b/runtime/hidden_api_test.cc
index 520dc6d..595f077 100644
--- a/runtime/hidden_api_test.cc
+++ b/runtime/hidden_api_test.cc
@@ -103,12 +103,14 @@
runtime_->SetHiddenApiEnforcementPolicy(hiddenapi::EnforcementPolicy::kDisabled);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Whitelist()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Greylist()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxP()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxO()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Blacklist()), false);
runtime_->SetHiddenApiEnforcementPolicy(hiddenapi::EnforcementPolicy::kJustWarn);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Whitelist()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Greylist()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxP()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxO()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Blacklist()), false);
@@ -117,6 +119,7 @@
static_cast<uint32_t>(hiddenapi::ApiList::GreylistMaxO().GetMaxAllowedSdkVersion()));
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Whitelist()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Greylist()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxP()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxO()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Blacklist()), true);
@@ -125,6 +128,16 @@
static_cast<uint32_t>(hiddenapi::ApiList::GreylistMaxO().GetMaxAllowedSdkVersion()) + 1);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Whitelist()), false);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Greylist()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxP()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxO()), true);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Blacklist()), true);
+
+ runtime_->SetHiddenApiEnforcementPolicy(hiddenapi::EnforcementPolicy::kEnabled);
+ runtime_->SetTargetSdkVersion(
+ static_cast<uint32_t>(hiddenapi::ApiList::GreylistMaxP().GetMaxAllowedSdkVersion()) + 1);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Whitelist()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Greylist()), false);
+ ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxP()), true);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::GreylistMaxO()), true);
ASSERT_EQ(ShouldDenyAccess(hiddenapi::ApiList::Blacklist()), true);
}
diff --git a/tools/class2greylist/src/com/android/class2greylist/Class2Greylist.java b/tools/class2greylist/src/com/android/class2greylist/Class2Greylist.java
index 621ee11..6305185 100644
--- a/tools/class2greylist/src/com/android/class2greylist/Class2Greylist.java
+++ b/tools/class2greylist/src/com/android/class2greylist/Class2Greylist.java
@@ -62,13 +62,14 @@
public static final String FLAG_GREYLIST = "greylist";
public static final String FLAG_BLACKLIST = "blacklist";
public static final String FLAG_GREYLIST_MAX_O = "greylist-max-o";
+ public static final String FLAG_GREYLIST_MAX_P = "greylist-max-p";
private static final Map<Integer, String> TARGET_SDK_TO_LIST_MAP;
static {
Map<Integer, String> map = new HashMap<>();
map.put(null, FLAG_GREYLIST);
map.put(26, FLAG_GREYLIST_MAX_O);
- map.put(28, FLAG_GREYLIST);
+ map.put(28, FLAG_GREYLIST_MAX_P);
TARGET_SDK_TO_LIST_MAP = Collections.unmodifiableMap(map);
}