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

Commit 8564347b authored by Achim Thesmann's avatar Achim Thesmann
Browse files

Log if ApplicationThread is used from Non-System

Bug: 317346668
Test: atest ActivityThreadTest BackgroundActivityLaunchTest
Flag: EXEMPT logging only
Change-Id: I7508b4e710f07a884ee18d5d01709b91e2ef0558
parent afaaf340
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
@@ -298,6 +298,7 @@ import java.util.TimeZone;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.stream.Collectors;

/**
 * This manages the execution of the main thread in an
@@ -1168,6 +1169,39 @@ public final class ActivityThread extends ClientTransactionHandler
        ApplicationThread() {
        }

        @Override
        public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
                throws RemoteException {
            if (Build.IS_DEBUGGABLE) {
                int callingUid = Binder.getCallingUid();
                if (callingUid != Process.SYSTEM_UID) {
                    String packageName;
                    if (callingUid == Process.ROOT_UID) {
                        packageName = "root";
                    } else {
                        String[] packagesForUid =
                                getSystemContext().getPackageManager().getPackagesForUid(
                                        callingUid);
                        if (packagesForUid == null || packagesForUid.length == 0) {
                            packageName = "unknown";
                        } else if (packagesForUid.length == 1) {
                            packageName = packagesForUid[0];
                        } else {
                            packageName = Arrays.asList(packagesForUid).stream().sorted().collect(
                                    Collectors.joining(", "));
                        }
                    }
                    Slog.wtf(TAG, "ApplicationThread called by non-system process"
                            + " (callingUid: " + callingUid
                            + "; packageName: " + packageName
                            + "; code: " + code
                            + "; flags: " + flags
                            + ")");
                }
            }
            return super.onTransact(code, data, reply, flags);
        }

        private static final String DB_CONNECTION_INFO_HEADER = "  %8s %8s %14s %5s %5s %5s  %s";
        private static final String DB_CONNECTION_INFO_FORMAT = "  %8s %8s %14s %5d %5d %5d  %s";
        private static final String DB_POOL_INFO_HEADER = "  %13s %13s %13s  %s";