diff options
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); |