Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ef762be9 authored by Alexander Roederer's avatar Alexander Roederer
Browse files

Fix isSystemUi to avoid System services

We previously switched to checking just status bar permission to
determine whether a service was system UI, but system services also pass
the status bar permissions check, so we still need to retain the
!isCallerSystemOrPhone check.

Bug: 299448097
Test: Flash+build manual test
Flag: ACONFIG android.app.lifetime_extension_refactor STAGING
Change-Id: I8a4304781f4e1bc4f52c9d7b14381d78a8ad5f1d
parent 3deff6ae
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -12050,10 +12050,17 @@ public class NotificationManagerService extends SystemService {
        @Override
        public void onServiceAdded(ManagedServiceInfo info) {
            if (lifetimeExtensionRefactor()) {
                // We explicitly check the status bar permission for the uid in the info object.
                // We can't use the calling uid here because it's probably always system server.
                // Note that this will also be true for the shell.
                info.isSystemUi = getContext().checkPermission(
                // Generally, only System or System UI should have the permissions to call
                // registerSystemService.
                // isCallerSystemOrPhone tells us whether the caller is System. We negate this,
                // to eliminate cases where the service was added by the system. This leaves
                // services registered by system server.
                // To identify system UI, we explicitly check the status bar permission for the
                // uid in the info object.
                // We can't use the calling uid here because it belongs to system server.
                // Note that this will also return true for the shell, but we deem this
                // acceptable, for the purposes of testing.
                info.isSystemUi = !isCallerSystemOrPhone() && getContext().checkPermission(
                        android.Manifest.permission.STATUS_BAR_SERVICE, -1, info.uid)
                        == PERMISSION_GRANTED;
            }