AppRestrictions - use vetted component
After vetting the intent, use the component we used for the vetting. Bug: 353680402 Bug: 365739560 Test: manual Flag: EXEMPT bugfix Change-Id: Iff0d820c1261c29eb6703bf89194339cba700688 (cherry picked from commit d3e34060803c97ae05719fe9301026e5c54892c8)
This commit is contained in:
committed by
Justin Dunlap
parent
12ea1a89e5
commit
586422578d
@@ -639,8 +639,11 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
||||
} else if (restrictionsIntent != null) {
|
||||
preference.setRestrictions(restrictions);
|
||||
if (invokeIfCustom && AppRestrictionsFragment.this.isResumed()) {
|
||||
// We don't necessarily trust the given intent to launch its component.
|
||||
// We will first check it, and only use parts of it that were indeed checked.
|
||||
final Intent vettedIntent;
|
||||
try {
|
||||
assertSafeToStartCustomActivity(restrictionsIntent);
|
||||
vettedIntent = assertSafeToStartCustomActivity(restrictionsIntent);
|
||||
} catch (ActivityNotFoundException | SecurityException e) {
|
||||
// return without startActivity
|
||||
Log.e(TAG, "Cannot start restrictionsIntent " + e);
|
||||
@@ -651,12 +654,16 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
||||
int requestCode = generateCustomActivityRequestCode(
|
||||
RestrictionsResultReceiver.this.preference);
|
||||
AppRestrictionsFragment.this.startActivityForResult(
|
||||
new Intent(restrictionsIntent), requestCode);
|
||||
vettedIntent, requestCode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void assertSafeToStartCustomActivity(Intent intent) {
|
||||
/**
|
||||
* Checks that it is safe to start the custom activity, and, if so, returns a copy of the
|
||||
* Intent using its vetted components.
|
||||
*/
|
||||
private Intent assertSafeToStartCustomActivity(Intent intent) {
|
||||
EventLog.writeEvent(0x534e4554, "223578534", -1 /* UID */, "");
|
||||
ResolveInfo resolveInfo = mPackageManager.resolveActivity(
|
||||
intent, PackageManager.MATCH_DEFAULT_ONLY);
|
||||
@@ -670,6 +677,13 @@ public class AppRestrictionsFragment extends SettingsPreferenceFragment implemen
|
||||
throw new SecurityException("Application " + packageName
|
||||
+ " is not allowed to start activity " + intent);
|
||||
}
|
||||
|
||||
// We were able to vet the given intent this time. Make a copy using the components
|
||||
// that were used to do the vetting, since that's as much as we've verified is safe.
|
||||
final Intent vettedIntent = new Intent(intent);
|
||||
vettedIntent.setComponent(activityInfo.getComponentName());
|
||||
vettedIntent.setPackage(activityInfo.packageName);
|
||||
return vettedIntent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user