diff options
| author | 2022-03-31 17:36:47 +0000 | |
|---|---|---|
| committer | 2022-03-31 17:36:47 +0000 | |
| commit | 9172a68c1ace904eea592f08b00b1a124505fdae (patch) | |
| tree | 32960b65fbec0dd15676d20c10d492b4ddfe0096 | |
| parent | 16ba50d5f56c75551cdad711005005c05c804631 (diff) | |
| parent | 6f4f7061509a32c48944d42fbaaffed26e7aca90 (diff) | |
Merge "Don't allow an external service to be an A11y service" into tm-dev
2 files changed, 20 insertions, 0 deletions
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java index c637045589e7..bc3ffab5ccb6 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java @@ -647,6 +647,14 @@ public class AccessibilitySecurityPolicy { return false; } + if ((serviceInfo.flags & ServiceInfo.FLAG_EXTERNAL_SERVICE) != 0) { + Slog.w(LOG_TAG, "Skipping accessibility service " + new ComponentName( + serviceInfo.packageName, serviceInfo.name).flattenToShortString() + + ": the service is the external one and doesn't allow to register as " + + "an accessibility service "); + return false; + } + int servicePackageUid = serviceInfo.applicationInfo.uid; if (mAppOpsManager.noteOpNoThrow(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE, servicePackageUid, serviceInfo.packageName, null, null) diff --git a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java index edacc165016f..9b56303244c0 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java @@ -573,6 +573,18 @@ public class AccessibilitySecurityPolicyTest { } @Test + public void canRegisterService_isExternalService_returnFalse() { + final ServiceInfo serviceInfo = new ServiceInfo(); + serviceInfo.applicationInfo = new ApplicationInfo(); + serviceInfo.packageName = PACKAGE_NAME; + serviceInfo.name = AccessibilitySecurityPolicyTest.class.getSimpleName(); + serviceInfo.permission = android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE; + serviceInfo.flags |= ServiceInfo.FLAG_EXTERNAL_SERVICE; + + assertFalse(mA11ySecurityPolicy.canRegisterService(serviceInfo)); + } + + @Test public void checkAccessibilityAccess_shouldCheckAppOps() { final AccessibilityServiceInfo mockServiceInfo = Mockito.mock( AccessibilityServiceInfo.class); |