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

Commit de7a72a3 authored by Alex Buynytskyy's avatar Alex Buynytskyy
Browse files

Use special permission to detect tests running as "shell identity"

For non-shell/non-root/non-system uids, USE_SYSTEM_DATA_LOADERS means
"install-related test adapted shell identity".

Bug: 275453203
Test: presubmit
Change-Id: I2322990db1930db88b49e502f315fbe74fcd4102
parent 6f28cbfc
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -677,7 +677,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
                ? params.installerPackageName : installerPackageName;

        if (PackageManagerServiceUtils.isRootOrShell(callingUid)
                || PackageInstallerSession.isSystemDataLoaderInstallation(params)) {
                || PackageInstallerSession.isSystemDataLoaderInstallation(params)
                || PackageManagerServiceUtils.isAdoptedShell(callingUid, mContext)) {
            params.installFlags |= PackageManager.INSTALL_FROM_ADB;
            // adb installs can override the installingPackageName, but not the
            // initiatingPackageName
+4 −1
Original line number Diff line number Diff line
@@ -1442,7 +1442,10 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
            @NonNull IOnChecksumsReadyListener onChecksumsReadyListener) {
        assertCallerIsOwnerRootOrVerifier();
        final File file = new File(stageDir, name);
        final String installerPackageName = getInstallSource().mInitiatingPackageName;
        final String installerPackageName = PackageManagerServiceUtils.isInstalledByAdb(
                getInstallSource().mInitiatingPackageName)
                ? getInstallSource().mInstallerPackageName
                : getInstallSource().mInitiatingPackageName;
        try {
            mPm.requestFileChecksums(file, installerPackageName, optional, required,
                    trustedInstallers, onChecksumsReadyListener);
+9 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static com.android.server.pm.PackageManagerService.SHELL_PACKAGE_NAME;
import static com.android.server.pm.PackageManagerService.STUB_SUFFIX;
import static com.android.server.pm.PackageManagerService.TAG;

import android.Manifest;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -1388,6 +1389,14 @@ public class PackageManagerServiceUtils {
        return uid == Process.SYSTEM_UID || uid == Process.ROOT_UID;
    }

    /**
     * Check if a UID is non-system UID adopted shell permission.
     */
    public static boolean isAdoptedShell(int uid, Context context) {
        return uid != Process.SYSTEM_UID && context.checkCallingOrSelfPermission(
                Manifest.permission.USE_SYSTEM_DATA_LOADERS) == PackageManager.PERMISSION_GRANTED;
    }

    /**
     * Check if a UID is system UID or shell's UID.
     */