Provide extra seinfo for SandboxedDetectionService

Add an extra seInfo for HotwordDetectionService and
VisualQueryDetectionService such that the two services can run in a
secontext other than isolated_app while holding isolated UID.

Bug: 265540209
Test: atest ActiveServicesTest && manual - sample app has correct seInfo

Change-Id: I3e71e51094b5744bc9f42181d010d06509c9b879
This commit is contained in:
Charles Chen
2023-01-17 22:52:17 +00:00
committed by charleschen
parent bf0224ca1d
commit 4034559836

View File

@@ -175,6 +175,8 @@ import android.os.TransactionTooLargeException;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.service.voice.HotwordDetectionService;
import android.service.voice.VisualQueryDetectionService;
import android.stats.devicepolicy.DevicePolicyEnums;
import android.text.TextUtils;
import android.util.ArrayMap;
@@ -3747,6 +3749,17 @@ public final class ActiveServices {
inSharedIsolatedProcess);
}
// TODO(b/265746493): Special case for HotwordDetectionService and
// VisualQueryDetectionService. Need a cleaner way to append this seInfo.
private String generateAdditionalSeInfoFromService(Intent service) {
if (service != null && service.getAction() != null
&& (service.getAction().equals(HotwordDetectionService.SERVICE_INTERFACE)
|| service.getAction().equals(VisualQueryDetectionService.SERVICE_INTERFACE))) {
return ":isolatedComputeApp";
}
return "";
}
private ServiceLookupResult retrieveServiceLocked(Intent service,
String instanceName, boolean isSdkSandboxService, int sdkSandboxClientAppUid,
String sdkSandboxClientAppPackage, String resolvedType,
@@ -3864,6 +3877,7 @@ public final class ActiveServices {
r.mRecentCallingPackage = callingPackage;
r.mRecentCallingUid = callingUid;
}
r.appInfo.seInfo += generateAdditionalSeInfoFromService(service);
return new ServiceLookupResult(r, resolution.getAlias());
}
@@ -4089,6 +4103,7 @@ public final class ActiveServices {
return null;
}
}
r.appInfo.seInfo += generateAdditionalSeInfoFromService(service);
return new ServiceLookupResult(r, resolution.getAlias());
}
return null;