Merge tag 'android-security-11.0.0_r49' into int/11/fp3
Android security 11.0.0 release 49
* tag 'android-security-11.0.0_r49':
Use strong pointer in ALooper to avoid use-after-free
Ensure looper isn't used after invalidateSensorQueue
Change-Id: I5b4146fdfad043ab4b6ae32854c69ad7e545ebce
diff --git a/cameraservice/vts/functional/VtsHalCameraServiceV2_0TargetTest.cpp b/cameraservice/vts/functional/VtsHalCameraServiceV2_0TargetTest.cpp
index 8c814d4..3ca7d75 100644
--- a/cameraservice/vts/functional/VtsHalCameraServiceV2_0TargetTest.cpp
+++ b/cameraservice/vts/functional/VtsHalCameraServiceV2_0TargetTest.cpp
@@ -334,10 +334,22 @@
return false;
}
- // Return the first advertised available depth stream sizes
- StreamConfiguration getDepthStreamConfiguration(const CameraMetadata& characteristics) {
+ bool isSecureOnlyDevice(const CameraMetadata& characteristics) {
camera_metadata_ro_entry rawEntry =
- characteristics.find(ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS);
+ characteristics.find(ANDROID_REQUEST_AVAILABLE_CAPABILITIES);
+ EXPECT_TRUE(rawEntry.count > 0);
+ if (rawEntry.count == 1 &&
+ rawEntry.data.u8[0] == ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA) {
+ return true;
+ }
+ return false;
+ }
+
+ // Return the first advertised available stream sizes for the given format
+ // and use-case.
+ StreamConfiguration getStreamConfiguration(const CameraMetadata& characteristics, uint32_t tag,
+ int32_t chosenUse, int32_t chosenFormat) {
+ camera_metadata_ro_entry rawEntry = characteristics.find(tag);
StreamConfiguration streamConfig;
const size_t STREAM_FORMAT_OFFSET = 0;
const size_t STREAM_WIDTH_OFFSET = 1;
@@ -351,8 +363,7 @@
for (size_t i = 0; i < rawEntry.count; i += STREAM_CONFIG_SIZE) {
int32_t format = rawEntry.data.i32[i + STREAM_FORMAT_OFFSET];
int32_t use = rawEntry.data.i32[i + STREAM_INOUT_OFFSET];
- if (format == HAL_PIXEL_FORMAT_Y16 &&
- use == ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_OUTPUT) {
+ if (format == chosenFormat && use == chosenUse) {
streamConfig.width = rawEntry.data.i32[i + STREAM_WIDTH_OFFSET];
streamConfig.height = rawEntry.data.i32[i + STREAM_HEIGHT_OFFSET];
return streamConfig;
@@ -413,17 +424,38 @@
int chosenImageFormat = AIMAGE_FORMAT_YUV_420_888;
int chosenImageWidth = kVGAImageWidth;
int chosenImageHeight = kVGAImageHeight;
- if (isDepthOnlyDevice) {
- StreamConfiguration depthStreamConfig = getDepthStreamConfiguration(rawMetadata);
- EXPECT_TRUE(depthStreamConfig.width != -1);
- EXPECT_TRUE(depthStreamConfig.height != -1);
- chosenImageFormat = AIMAGE_FORMAT_DEPTH16;
- chosenImageWidth = depthStreamConfig.width;
- chosenImageHeight = depthStreamConfig.height;
+ bool isSecureOnlyCamera = isSecureOnlyDevice(rawMetadata);
+ status_t mStatus = OK;
+ if (isSecureOnlyCamera) {
+ StreamConfiguration secureStreamConfig =
+ getStreamConfiguration(rawMetadata, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS,
+ ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
+ HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED);
+ EXPECT_TRUE(secureStreamConfig.width != -1);
+ EXPECT_TRUE(secureStreamConfig.height != -1);
+ chosenImageFormat = AIMAGE_FORMAT_PRIVATE;
+ chosenImageWidth = secureStreamConfig.width;
+ chosenImageHeight = secureStreamConfig.height;
+ mStatus = AImageReader_newWithUsage(
+ chosenImageWidth, chosenImageHeight, chosenImageFormat,
+ AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT, kCaptureRequestCount, &reader);
+
+ } else {
+ if (isDepthOnlyDevice) {
+ StreamConfiguration depthStreamConfig = getStreamConfiguration(
+ rawMetadata, ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS,
+ ANDROID_DEPTH_AVAILABLE_DEPTH_STREAM_CONFIGURATIONS_OUTPUT,
+ HAL_PIXEL_FORMAT_Y16);
+ EXPECT_TRUE(depthStreamConfig.width != -1);
+ EXPECT_TRUE(depthStreamConfig.height != -1);
+ chosenImageFormat = AIMAGE_FORMAT_DEPTH16;
+ chosenImageWidth = depthStreamConfig.width;
+ chosenImageHeight = depthStreamConfig.height;
+ }
+ mStatus = AImageReader_new(chosenImageWidth, chosenImageHeight, chosenImageFormat,
+ kCaptureRequestCount, &reader);
}
- auto mStatus = AImageReader_new(chosenImageWidth, chosenImageHeight, chosenImageFormat,
- kCaptureRequestCount, &reader);
EXPECT_EQ(mStatus, AMEDIA_OK);
native_handle_t* wh = nullptr;
mStatus = AImageReader_getWindowNativeHandle(reader, &wh);