Android-x86
Fork
Donation

  • R/O
  • HTTP
  • SSH
  • HTTPS

frameworks-base: Commit

frameworks/base


Commit MetaInfo

Revisionfaf2dc95bf26fb075039ed3ee7623e83a281c6dd (tree)
Time2018-08-11 05:28:06
AuthorMakoto Onuki <omakoto@goog...>
Commiterandroid-build-team Robot

Log Message

Backport Prevent shortcut info package name spoofing

Test: cts-tradefed run cts -m CtsShortcutManagerTestCases -t android.content.pm.cts.shortcutmanager.ShortcutManagerFakingPublisherTest
Bug: 109824443

Change-Id: I90443973aaef157d357b98b739572866125b2bbc
Merged-In: I78948446a63b428ae750464194558fd44a658493
(cherry picked from commit 9e21579a11219581a0c08ff5dd6ac4dc22e988a4)

Change Summary

Incremental Difference

--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -131,6 +131,7 @@ import java.nio.charset.StandardCharsets;
131131 import java.util.ArrayList;
132132 import java.util.Collections;
133133 import java.util.List;
134+import java.util.Objects;
134135 import java.util.concurrent.atomic.AtomicBoolean;
135136 import java.util.function.Consumer;
136137 import java.util.function.Predicate;
@@ -1534,6 +1535,24 @@ public class ShortcutService extends IShortcutService.Stub {
15341535 "Ephemeral apps can't use ShortcutManager");
15351536 }
15361537
1538+ private void verifyShortcutInfoPackage(String callerPackage, ShortcutInfo si) {
1539+ if (si == null) {
1540+ return;
1541+ }
1542+ if (!Objects.equals(callerPackage, si.getPackage())) {
1543+ android.util.EventLog.writeEvent(0x534e4554, "109824443", -1, "");
1544+ throw new SecurityException("Shortcut package name mismatch");
1545+ }
1546+ }
1547+
1548+ private void verifyShortcutInfoPackages(
1549+ String callerPackage, List<ShortcutInfo> list) {
1550+ final int size = list.size();
1551+ for (int i = 0; i < size; i++) {
1552+ verifyShortcutInfoPackage(callerPackage, list.get(i));
1553+ }
1554+ }
1555+
15371556 // Overridden in unit tests to execute r synchronously.
15381557 void injectPostToHandler(Runnable r) {
15391558 mHandler.post(r);
@@ -1681,6 +1700,7 @@ public class ShortcutService extends IShortcutService.Stub {
16811700 verifyCaller(packageName, userId);
16821701
16831702 final List<ShortcutInfo> newShortcuts = (List<ShortcutInfo>) shortcutInfoList.getList();
1703+ verifyShortcutInfoPackages(packageName, newShortcuts);
16841704 final int size = newShortcuts.size();
16851705
16861706 synchronized (mLock) {
@@ -1732,6 +1752,7 @@ public class ShortcutService extends IShortcutService.Stub {
17321752 verifyCaller(packageName, userId);
17331753
17341754 final List<ShortcutInfo> newShortcuts = (List<ShortcutInfo>) shortcutInfoList.getList();
1755+ verifyShortcutInfoPackages(packageName, newShortcuts);
17351756 final int size = newShortcuts.size();
17361757
17371758 synchronized (mLock) {
@@ -1812,6 +1833,7 @@ public class ShortcutService extends IShortcutService.Stub {
18121833 verifyCaller(packageName, userId);
18131834
18141835 final List<ShortcutInfo> newShortcuts = (List<ShortcutInfo>) shortcutInfoList.getList();
1836+ verifyShortcutInfoPackages(packageName, newShortcuts);
18151837 final int size = newShortcuts.size();
18161838
18171839 synchronized (mLock) {
@@ -1871,6 +1893,7 @@ public class ShortcutService extends IShortcutService.Stub {
18711893 Preconditions.checkNotNull(shortcut);
18721894 Preconditions.checkArgument(shortcut.isEnabled(), "Shortcut must be enabled");
18731895 verifyCaller(packageName, userId);
1896+ verifyShortcutInfoPackage(packageName, shortcut);
18741897
18751898 final Intent ret;
18761899 synchronized (mLock) {
@@ -1892,6 +1915,7 @@ public class ShortcutService extends IShortcutService.Stub {
18921915 private boolean requestPinItem(String packageName, int userId, ShortcutInfo shortcut,
18931916 AppWidgetProviderInfo appWidget, Bundle extras, IntentSender resultIntent) {
18941917 verifyCaller(packageName, userId);
1918+ verifyShortcutInfoPackage(packageName, shortcut);
18951919
18961920 final boolean ret;
18971921 synchronized (mLock) {
Show on old repository browser