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

Commit bca12293 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Add extra debug to capture system state

Current set of logs / bugreports is insufficient to debug the issue.
Add more logs to hopefully catch enough information to track down
the root cause.

Bug: 111075456
Test: Manual. Builds and runs
Change-Id: I2bc1c371b6c9c5b9e1886e8f6541d74fc8e54618
parent 0d80c411
Loading
Loading
Loading
Loading
+42 −0
Original line number Diff line number Diff line
@@ -5678,6 +5678,27 @@ public class PackageManagerService extends IPackageManager.Stub
            final PackageParser.Package pkg = (packageNames != null && packageNames.length > 0)
                    ? mPackages.get(packageNames[0])
                    : null;
            // Additional logs for b/111075456; ignore system UIDs
            if (pkg == null && UserHandle.getAppId(uid) >= Process.FIRST_APPLICATION_UID) {
                if (packageNames == null || packageNames.length < 2) {
                    // unclear if this is shared user or just a missing application
                    Log.e(TAG, "Failed to find package"
                            + "; permName: " + permName
                            + ", uid: " + uid
                            + ", caller: " + Binder.getCallingUid(),
                            new Throwable());
                } else {
                    // definitely shared user
                    Log.e(TAG, "Failed to find package"
                            + "; permName: " + permName
                            + ", uid: " + uid
                            + ", caller: " + Binder.getCallingUid()
                            + ", packages: " + Arrays.toString(packageNames),
                            new Throwable());
                }
                // run again just to try to get debug output
                getPackagesForUid_debug(uid, true);
            }
            return mPermissionManager.checkUidPermission(permName, pkg, uid, getCallingUid());
        }
    }
@@ -6395,15 +6416,25 @@ public class PackageManagerService extends IPackageManager.Stub
    @Override
    public String[] getPackagesForUid(int uid) {
        return getPackagesForUid_debug(uid, false);
    }
    // Debug output for b/111075456
    private String[] getPackagesForUid_debug(int uid, boolean debug) {
        final int callingUid = Binder.getCallingUid();
        final boolean isCallerInstantApp = getInstantAppPackageName(callingUid) != null;
        final int userId = UserHandle.getUserId(uid);
        final int appId = UserHandle.getAppId(uid);
        if (debug) Slog.e(TAG, "Finding packages for UID"
                + "; uid: " + uid
                + ", userId: " + userId
                + ", appId: " + appId
                + ", caller: " + callingUid);
        // reader
        synchronized (mPackages) {
            final Object obj = mSettings.getSettingLPr(appId);
            if (obj instanceof SharedUserSetting) {
                if (isCallerInstantApp) {
                    if (debug) Slog.e(TAG, "Caller is instant and package has shared users");
                    return null;
                }
                final SharedUserSetting sus = (SharedUserSetting) obj;
@@ -6411,8 +6442,13 @@ public class PackageManagerService extends IPackageManager.Stub
                String[] res = new String[N];
                final Iterator<PackageSetting> it = sus.packages.iterator();
                int i = 0;
                if (debug && !it.hasNext()) Slog.e(TAG, "Shared user, but, no packages");
                while (it.hasNext()) {
                    PackageSetting ps = it.next();
                    if (debug) Slog.e(TAG, "Check shared package"
                            + "; installed? " + ps.getInstalled(userId)
                            + ", shared setting: " + ps
                            + ", package setting: " + mSettings.mPackages.get(ps.name));
                    if (ps.getInstalled(userId)) {
                        res[i++] = ps.name;
                    } else {
@@ -6425,6 +6461,12 @@ public class PackageManagerService extends IPackageManager.Stub
                if (ps.getInstalled(userId) && !filterAppAccessLPr(ps, callingUid, userId)) {
                    return new String[]{ps.name};
                }
                if (debug) Slog.e(TAG, "Removing normal package"
                        + "; installed? " + ps.getInstalled(userId)
                        + ", filtered? " + filterAppAccessLPr(ps, callingUid, userId));
            } else if (debug) {
                if (debug) Slog.e(TAG, "No setting found"
                        + "; obj: " + (obj == null ? "<<NULL>>" : obj.toString()));
            }
        }
        return null;