Loading packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java +19 −9 Original line number Diff line number Diff line Loading @@ -81,6 +81,12 @@ public class InstallStart extends Activity { String callingPackage = getCallingPackage(); String callingAttributionTag = null; // Uid of the source package, coming from ActivityManager int callingUid = getLaunchedFromUid(); if (callingUid == Process.INVALID_UID) { Log.w(TAG, "Could not determine the launching uid."); } final boolean isSessionInstall = PackageInstaller.ACTION_CONFIRM_PRE_APPROVAL.equals(intent.getAction()) || PackageInstaller.ACTION_CONFIRM_INSTALL.equals(intent.getAction()); Loading @@ -90,24 +96,24 @@ public class InstallStart extends Activity { final int sessionId = (isSessionInstall ? intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1) : -1); int originatingUidFromSession = callingUid; if (callingPackage == null && sessionId != -1) { PackageInstaller packageInstaller = getPackageManager().getPackageInstaller(); PackageInstaller.SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId); callingPackage = (sessionInfo != null) ? sessionInfo.getInstallerPackageName() : null; callingAttributionTag = (sessionInfo != null) ? sessionInfo.getInstallerAttributionTag() : null; if (sessionInfo != null) { callingPackage = sessionInfo.getInstallerPackageName(); callingAttributionTag = sessionInfo.getInstallerAttributionTag(); originatingUidFromSession = sessionInfo.getOriginatingUid(); } } final ApplicationInfo sourceInfo = getSourceInfo(callingPackage); // Uid of the source package, coming from ActivityManager int callingUid = getLaunchedFromUid(); if (callingUid == Process.INVALID_UID) { Log.e(TAG, "Could not determine the launching uid."); } // Uid of the source package, with a preference to uid from ApplicationInfo final int originatingUid = sourceInfo != null ? sourceInfo.uid : callingUid; if (callingUid == Process.INVALID_UID && sourceInfo == null) { Log.e(TAG, "Cannot determine caller since UID is invalid and sourceInfo is null"); mAbortInstall = true; } Loading @@ -127,7 +133,7 @@ public class InstallStart extends Activity { && originatingUid != Process.INVALID_UID) { final int targetSdkVersion = getMaxTargetSdkVersionForUid(this, originatingUid); if (targetSdkVersion < 0) { Log.w(TAG, "Cannot get target sdk version for uid " + originatingUid); Log.e(TAG, "Cannot get target sdk version for uid " + originatingUid); // Invalid originating uid supplied. Abort install. mAbortInstall = true; } else if (targetSdkVersion >= Build.VERSION_CODES.O && !isUidRequestingPermission( Loading @@ -139,6 +145,8 @@ public class InstallStart extends Activity { } if (sessionId != -1 && !isCallerSessionOwner(originatingUid, sessionId)) { Log.e(TAG, "UID " + originatingUid + " is not the owner of session " + sessionId); mAbortInstall = true; } Loading Loading @@ -178,6 +186,8 @@ public class InstallStart extends Activity { callingAttributionTag); nextActivity.putExtra(PackageInstallerActivity.EXTRA_ORIGINAL_SOURCE_INFO, sourceInfo); nextActivity.putExtra(Intent.EXTRA_ORIGINATING_UID, originatingUid); nextActivity.putExtra(PackageInstallerActivity.EXTRA_ORIGINATING_UID_FROM_SESSION_INFO, originatingUidFromSession); if (isSessionInstall) { nextActivity.setClass(this, PackageInstallerActivity.class); Loading packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java +17 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ public class PackageInstallerActivity extends Activity { static final String EXTRA_ORIGINAL_SOURCE_INFO = "EXTRA_ORIGINAL_SOURCE_INFO"; static final String EXTRA_STAGED_SESSION_ID = "EXTRA_STAGED_SESSION_ID"; static final String EXTRA_APP_SNIPPET = "EXTRA_APP_SNIPPET"; static final String EXTRA_ORIGINATING_UID_FROM_SESSION_INFO = "EXTRA_ORIGINATING_UID_FROM_SESSION_INFO"; private static final String ALLOW_UNKNOWN_SOURCES_KEY = PackageInstallerActivity.class.getName() + "ALLOW_UNKNOWN_SOURCES_KEY"; Loading @@ -91,7 +93,14 @@ public class PackageInstallerActivity extends Activity { private Uri mOriginatingURI; private Uri mReferrerURI; private int mOriginatingUid = Process.INVALID_UID; private String mOriginatingPackage; // The package name corresponding to #mOriginatingUid /** * The package name corresponding to #mOriginatingUid */ private String mOriginatingPackage; /** * The package name corresponding to the app updater in the update-ownership confirmation dialog */ private String mOriginatingPackageFromSessionInfo; private int mActivityResultCode = Activity.RESULT_CANCELED; private int mPendingUserActionReason = -1; Loading Loading @@ -144,7 +153,8 @@ public class PackageInstallerActivity extends Activity { viewToEnable = mDialog.requireViewById(R.id.install_confirm_question_update); final CharSequence existingUpdateOwnerLabel = getExistingUpdateOwnerLabel(); final CharSequence requestedUpdateOwnerLabel = getApplicationLabel(mCallingPackage); final CharSequence requestedUpdateOwnerLabel = getApplicationLabel(mOriginatingPackageFromSessionInfo); if (!TextUtils.isEmpty(existingUpdateOwnerLabel) && mPendingUserActionReason == PackageInstaller.REASON_REMIND_OWNERSHIP) { String updateOwnerString = Loading Loading @@ -376,6 +386,11 @@ public class PackageInstallerActivity extends Activity { Process.INVALID_UID); mOriginatingPackage = (mOriginatingUid != Process.INVALID_UID) ? getPackageNameForUid(mOriginatingUid) : null; int originatingUidFromSessionInfo = intent.getIntExtra(EXTRA_ORIGINATING_UID_FROM_SESSION_INFO, Process.INVALID_UID); mOriginatingPackageFromSessionInfo = (originatingUidFromSessionInfo != Process.INVALID_UID) ? getPackageNameForUid(originatingUidFromSessionInfo) : mCallingPackage; final Object packageSource; if (PackageInstaller.ACTION_CONFIRM_INSTALL.equals(action)) { Loading Loading
packages/PackageInstaller/src/com/android/packageinstaller/InstallStart.java +19 −9 Original line number Diff line number Diff line Loading @@ -81,6 +81,12 @@ public class InstallStart extends Activity { String callingPackage = getCallingPackage(); String callingAttributionTag = null; // Uid of the source package, coming from ActivityManager int callingUid = getLaunchedFromUid(); if (callingUid == Process.INVALID_UID) { Log.w(TAG, "Could not determine the launching uid."); } final boolean isSessionInstall = PackageInstaller.ACTION_CONFIRM_PRE_APPROVAL.equals(intent.getAction()) || PackageInstaller.ACTION_CONFIRM_INSTALL.equals(intent.getAction()); Loading @@ -90,24 +96,24 @@ public class InstallStart extends Activity { final int sessionId = (isSessionInstall ? intent.getIntExtra(PackageInstaller.EXTRA_SESSION_ID, -1) : -1); int originatingUidFromSession = callingUid; if (callingPackage == null && sessionId != -1) { PackageInstaller packageInstaller = getPackageManager().getPackageInstaller(); PackageInstaller.SessionInfo sessionInfo = packageInstaller.getSessionInfo(sessionId); callingPackage = (sessionInfo != null) ? sessionInfo.getInstallerPackageName() : null; callingAttributionTag = (sessionInfo != null) ? sessionInfo.getInstallerAttributionTag() : null; if (sessionInfo != null) { callingPackage = sessionInfo.getInstallerPackageName(); callingAttributionTag = sessionInfo.getInstallerAttributionTag(); originatingUidFromSession = sessionInfo.getOriginatingUid(); } } final ApplicationInfo sourceInfo = getSourceInfo(callingPackage); // Uid of the source package, coming from ActivityManager int callingUid = getLaunchedFromUid(); if (callingUid == Process.INVALID_UID) { Log.e(TAG, "Could not determine the launching uid."); } // Uid of the source package, with a preference to uid from ApplicationInfo final int originatingUid = sourceInfo != null ? sourceInfo.uid : callingUid; if (callingUid == Process.INVALID_UID && sourceInfo == null) { Log.e(TAG, "Cannot determine caller since UID is invalid and sourceInfo is null"); mAbortInstall = true; } Loading @@ -127,7 +133,7 @@ public class InstallStart extends Activity { && originatingUid != Process.INVALID_UID) { final int targetSdkVersion = getMaxTargetSdkVersionForUid(this, originatingUid); if (targetSdkVersion < 0) { Log.w(TAG, "Cannot get target sdk version for uid " + originatingUid); Log.e(TAG, "Cannot get target sdk version for uid " + originatingUid); // Invalid originating uid supplied. Abort install. mAbortInstall = true; } else if (targetSdkVersion >= Build.VERSION_CODES.O && !isUidRequestingPermission( Loading @@ -139,6 +145,8 @@ public class InstallStart extends Activity { } if (sessionId != -1 && !isCallerSessionOwner(originatingUid, sessionId)) { Log.e(TAG, "UID " + originatingUid + " is not the owner of session " + sessionId); mAbortInstall = true; } Loading Loading @@ -178,6 +186,8 @@ public class InstallStart extends Activity { callingAttributionTag); nextActivity.putExtra(PackageInstallerActivity.EXTRA_ORIGINAL_SOURCE_INFO, sourceInfo); nextActivity.putExtra(Intent.EXTRA_ORIGINATING_UID, originatingUid); nextActivity.putExtra(PackageInstallerActivity.EXTRA_ORIGINATING_UID_FROM_SESSION_INFO, originatingUidFromSession); if (isSessionInstall) { nextActivity.setClass(this, PackageInstallerActivity.class); Loading
packages/PackageInstaller/src/com/android/packageinstaller/PackageInstallerActivity.java +17 −2 Original line number Diff line number Diff line Loading @@ -83,6 +83,8 @@ public class PackageInstallerActivity extends Activity { static final String EXTRA_ORIGINAL_SOURCE_INFO = "EXTRA_ORIGINAL_SOURCE_INFO"; static final String EXTRA_STAGED_SESSION_ID = "EXTRA_STAGED_SESSION_ID"; static final String EXTRA_APP_SNIPPET = "EXTRA_APP_SNIPPET"; static final String EXTRA_ORIGINATING_UID_FROM_SESSION_INFO = "EXTRA_ORIGINATING_UID_FROM_SESSION_INFO"; private static final String ALLOW_UNKNOWN_SOURCES_KEY = PackageInstallerActivity.class.getName() + "ALLOW_UNKNOWN_SOURCES_KEY"; Loading @@ -91,7 +93,14 @@ public class PackageInstallerActivity extends Activity { private Uri mOriginatingURI; private Uri mReferrerURI; private int mOriginatingUid = Process.INVALID_UID; private String mOriginatingPackage; // The package name corresponding to #mOriginatingUid /** * The package name corresponding to #mOriginatingUid */ private String mOriginatingPackage; /** * The package name corresponding to the app updater in the update-ownership confirmation dialog */ private String mOriginatingPackageFromSessionInfo; private int mActivityResultCode = Activity.RESULT_CANCELED; private int mPendingUserActionReason = -1; Loading Loading @@ -144,7 +153,8 @@ public class PackageInstallerActivity extends Activity { viewToEnable = mDialog.requireViewById(R.id.install_confirm_question_update); final CharSequence existingUpdateOwnerLabel = getExistingUpdateOwnerLabel(); final CharSequence requestedUpdateOwnerLabel = getApplicationLabel(mCallingPackage); final CharSequence requestedUpdateOwnerLabel = getApplicationLabel(mOriginatingPackageFromSessionInfo); if (!TextUtils.isEmpty(existingUpdateOwnerLabel) && mPendingUserActionReason == PackageInstaller.REASON_REMIND_OWNERSHIP) { String updateOwnerString = Loading Loading @@ -376,6 +386,11 @@ public class PackageInstallerActivity extends Activity { Process.INVALID_UID); mOriginatingPackage = (mOriginatingUid != Process.INVALID_UID) ? getPackageNameForUid(mOriginatingUid) : null; int originatingUidFromSessionInfo = intent.getIntExtra(EXTRA_ORIGINATING_UID_FROM_SESSION_INFO, Process.INVALID_UID); mOriginatingPackageFromSessionInfo = (originatingUidFromSessionInfo != Process.INVALID_UID) ? getPackageNameForUid(originatingUidFromSessionInfo) : mCallingPackage; final Object packageSource; if (PackageInstaller.ACTION_CONFIRM_INSTALL.equals(action)) { Loading