diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java b/services/accessibility/java/com/android/server/accessibility/AccessibilitySecurityPolicy.java index c637045589e7b..bc3ffab5ccb6f 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 edacc165016f1..9b56303244c0c 100644 --- a/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/accessibility/AccessibilitySecurityPolicyTest.java @@ -572,6 +572,18 @@ public class AccessibilitySecurityPolicyTest { serviceInfo.applicationInfo.uid, serviceInfo.packageName, null, null); } + @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(