Skip to content
This repository was archived by the owner on Dec 23, 2024. It is now read-only.

18 files changed

+1042
-14
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
From d39bbaa57ea3e636aa581478ae27ef9829b75718 Mon Sep 17 00:00:00 2001
2+
From: Brian Delwiche <[email protected]>
3+
Date: Mon, 22 Apr 2024 21:10:09 +0000
4+
Subject: [PATCH] Fix an authentication bypass bug in SMP
5+
6+
When pairing with BLE legacy pairing initiated
7+
from remote, authentication can be bypassed.
8+
This change fixes it.
9+
10+
Bug: 251514170
11+
Test: m com.android.btservices
12+
Test: manual run against PoC
13+
Ignore-AOSP-First: security
14+
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:25a3fcd487c799d5d9029b8646159a0b10143d97)
15+
Merged-In: I369a8fdd675eca731a7a488ed6a2be645058b795
16+
Change-Id: I369a8fdd675eca731a7a488ed6a2be645058b795
17+
---
18+
system/stack/smp/smp_act.cc | 12 ++++++++++++
19+
system/stack/smp/smp_int.h | 1 +
20+
2 files changed, 13 insertions(+)
21+
22+
diff --git a/system/stack/smp/smp_act.cc b/system/stack/smp/smp_act.cc
23+
index 868c7b53118..d6021bbecd2 100644
24+
--- a/system/stack/smp/smp_act.cc
25+
+++ b/system/stack/smp/smp_act.cc
26+
@@ -291,6 +291,7 @@ void smp_send_pair_rsp(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
27+
void smp_send_confirm(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
28+
SMP_TRACE_DEBUG("%s", __func__);
29+
smp_send_cmd(SMP_OPCODE_CONFIRM, p_cb);
30+
+ p_cb->flags |= SMP_PAIR_FLAGS_CMD_CONFIRM_SENT;
31+
}
32+
33+
/*******************************************************************************
34+
@@ -665,6 +666,17 @@ void smp_proc_init(tSMP_CB* p_cb, tSMP_INT_DATA* p_data) {
35+
return;
36+
}
37+
38+
+ if (!((p_cb->loc_auth_req & SMP_SC_SUPPORT_BIT) &&
39+
+ (p_cb->peer_auth_req & SMP_SC_SUPPORT_BIT)) &&
40+
+ !(p_cb->flags & SMP_PAIR_FLAGS_CMD_CONFIRM_SENT)) {
41+
+ // in legacy pairing, the peer should send its rand after
42+
+ // we send our confirm
43+
+ tSMP_INT_DATA smp_int_data{};
44+
+ smp_int_data.status = SMP_INVALID_PARAMETERS;
45+
+ smp_sm_event(p_cb, SMP_AUTH_CMPL_EVT, &smp_int_data);
46+
+ return;
47+
+ }
48+
+
49+
/* save the SRand for comparison */
50+
STREAM_TO_ARRAY(p_cb->rrand.data(), p, OCTET16_LEN);
51+
}
52+
diff --git a/system/stack/smp/smp_int.h b/system/stack/smp/smp_int.h
53+
index 5e731806de7..b2ab4776421 100644
54+
--- a/system/stack/smp/smp_int.h
55+
+++ b/system/stack/smp/smp_int.h
56+
@@ -222,6 +222,7 @@ typedef union {
57+
(1 << 7) /* used to resolve race condition */
58+
#define SMP_PAIR_FLAG_HAVE_LOCAL_PUBL_KEY \
59+
(1 << 8) /* used on peripheral to resolve race condition */
60+
+#define SMP_PAIR_FLAGS_CMD_CONFIRM_SENT (1 << 9)
61+
62+
/* check if authentication requirement need MITM protection */
63+
#define SMP_NO_MITM_REQUIRED(x) (((x)&SMP_AUTH_YN_BIT) == 0)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
From a0afe17e817eb39f3de3251f7b040a5f6eebc577 Mon Sep 17 00:00:00 2001
2+
From: Ivan Chiang <[email protected]>
3+
Date: Mon, 18 Mar 2024 02:46:56 +0000
4+
Subject: [PATCH] [PM] Send ACTION_PACKAGE_CHANGED when mimeGroups are changed
5+
6+
Test: atest CtsPackageManagerTestCases:PackageManagerShellCommandMultiUserTest
7+
Test: atest CtsPackageManagerTestCases:PackageManagerTest
8+
Bug: 297517712
9+
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:81eb9f8294645684ce1fad39d5d4a00ef11736e4)
10+
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:c160424ef22bffd25a9cc9bc7b901ae1b9721a72)
11+
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:6d9520bb9be2e31fd43bb08f0017838bbd389883)
12+
Merged-In: I271a3526ea4555249e3a2797605269257330e0e9
13+
Change-Id: I271a3526ea4555249e3a2797605269257330e0e9
14+
---
15+
.../server/pm/PackageManagerService.java | 23 ++++++++++++++++---
16+
1 file changed, 20 insertions(+), 3 deletions(-)
17+
18+
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
19+
index f41b9fc540f6..a34693b7cb12 100644
20+
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
21+
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
22+
@@ -5869,9 +5869,26 @@ public void setMimeGroup(String packageName, String mimeGroup, List<String> mime
23+
packageStateWrite.setMimeGroup(mimeGroup, mimeTypesSet);
24+
});
25+
if (mComponentResolver.updateMimeGroup(snapshotComputer(), packageName, mimeGroup)) {
26+
- Binder.withCleanCallingIdentity(() ->
27+
- mPreferredActivityHelper.clearPackagePreferredActivities(packageName,
28+
- UserHandle.USER_ALL));
29+
+ Binder.withCleanCallingIdentity(() -> {
30+
+ mPreferredActivityHelper.clearPackagePreferredActivities(packageName,
31+
+ UserHandle.USER_ALL);
32+
+ // Send the ACTION_PACKAGE_CHANGED when the mimeGroup has changes
33+
+ final Computer snapShot = snapshotComputer();
34+
+ final ArrayList<String> components = new ArrayList<>(
35+
+ Collections.singletonList(packageName));
36+
+ final int appId = packageState.getAppId();
37+
+ final int[] userIds = resolveUserIds(UserHandle.USER_ALL);
38+
+ final String reason = "The mimeGroup is changed";
39+
+ for (int i = 0; i < userIds.length; i++) {
40+
+ final PackageUserStateInternal pkgUserState =
41+
+ packageState.getUserStates().get(userIds[i]);
42+
+ if (pkgUserState != null && pkgUserState.isInstalled()) {
43+
+ final int packageUid = UserHandle.getUid(userIds[i], appId);
44+
+ sendPackageChangedBroadcast(snapShot, packageName,
45+
+ true /* dontKillApp */, components, packageUid, reason);
46+
+ }
47+
+ }
48+
+ });
49+
}
50+
51+
scheduleWriteSettings();
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
From cb2db1244c4668fe8b3d6cf36d0078190fa8f0af Mon Sep 17 00:00:00 2001
2+
From: Bishoy Gendy <[email protected]>
3+
Date: Thu, 11 Apr 2024 16:37:10 +0000
4+
Subject: [PATCH] Fix security vulnerability allowing apps to start from
5+
background
6+
7+
Bug: 317048338
8+
Test: Using the steps in b/317048338#comment12
9+
(cherry picked from commit c5fc8ea92c0aabbb2fdccc23b743c18a8bf62e64)
10+
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:df3584bb93ab89d7e174f7d39e42d4b22cb92fe0)
11+
Merged-In: Ia91199fdb23beed27bde687fdca8fe5d3a5a4759
12+
Change-Id: Ia91199fdb23beed27bde687fdca8fe5d3a5a4759
13+
---
14+
.../media/session/ParcelableListBinder.java | 13 +++++++++++--
15+
.../android/server/media/MediaSessionRecord.java | 14 ++++++++------
16+
2 files changed, 19 insertions(+), 8 deletions(-)
17+
18+
diff --git a/media/java/android/media/session/ParcelableListBinder.java b/media/java/android/media/session/ParcelableListBinder.java
19+
index bbf1e0889b68..d78828462b1e 100644
20+
--- a/media/java/android/media/session/ParcelableListBinder.java
21+
+++ b/media/java/android/media/session/ParcelableListBinder.java
22+
@@ -45,6 +45,7 @@ public class ParcelableListBinder<T extends Parcelable> extends Binder {
23+
private static final int END_OF_PARCEL = 0;
24+
private static final int ITEM_CONTINUED = 1;
25+
26+
+ private final Class<T> mListElementsClass;
27+
private final Consumer<List<T>> mConsumer;
28+
29+
private final Object mLock = new Object();
30+
@@ -61,9 +62,11 @@ public class ParcelableListBinder<T extends Parcelable> extends Binder {
31+
/**
32+
* Creates an instance.
33+
*
34+
+ * @param listElementsClass the class of the list elements.
35+
* @param consumer a consumer that consumes the list received
36+
*/
37+
- public ParcelableListBinder(@NonNull Consumer<List<T>> consumer) {
38+
+ public ParcelableListBinder(Class<T> listElementsClass, @NonNull Consumer<List<T>> consumer) {
39+
+ mListElementsClass = listElementsClass;
40+
mConsumer = consumer;
41+
}
42+
43+
@@ -83,7 +86,13 @@ protected boolean onTransact(int code, Parcel data, Parcel reply, int flags)
44+
mCount = data.readInt();
45+
}
46+
while (i < mCount && data.readInt() != END_OF_PARCEL) {
47+
- mList.add(data.readParcelable(null));
48+
+ Object object = data.readParcelable(null);
49+
+ if (mListElementsClass.isAssignableFrom(object.getClass())) {
50+
+ // Checking list items are of compaitible types to validate against malicious
51+
+ // apps calling it directly via reflection with non compilable items.
52+
+ // See b/317048338 for more details
53+
+ mList.add((T) object);
54+
+ }
55+
i++;
56+
}
57+
if (i >= mCount) {
58+
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
59+
index b459cfe6b44e..8f07b3924da0 100644
60+
--- a/services/core/java/com/android/server/media/MediaSessionRecord.java
61+
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
62+
@@ -1100,12 +1100,14 @@ public void resetQueue() throws RemoteException {
63+
64+
@Override
65+
public IBinder getBinderForSetQueue() throws RemoteException {
66+
- return new ParcelableListBinder<QueueItem>((list) -> {
67+
- synchronized (mLock) {
68+
- mQueue = list;
69+
- }
70+
- mHandler.post(MessageHandler.MSG_UPDATE_QUEUE);
71+
- });
72+
+ return new ParcelableListBinder<QueueItem>(
73+
+ QueueItem.class,
74+
+ (list) -> {
75+
+ synchronized (mLock) {
76+
+ mQueue = list;
77+
+ }
78+
+ mHandler.post(MessageHandler.MSG_UPDATE_QUEUE);
79+
+ });
80+
}
81+
82+
@Override
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
From 93a2c9a876b978db4109a5360479e793eba5bf95 Mon Sep 17 00:00:00 2001
2+
From: Yi-an Chen <[email protected]>
3+
Date: Tue, 23 Apr 2024 21:17:44 +0000
4+
Subject: [PATCH] Fix security vulnerability of non-dynamic permission removal
5+
6+
The original removePermission() code in PermissionManagerServiceImpl
7+
missed a logical negation operator when handling non-dynamic
8+
permissions, causing both
9+
testPermissionPermission_nonDynamicPermission_permissionUnchanged and
10+
testRemovePermission_dynamicPermission_permissionRemoved tests in
11+
DynamicPermissionsTest to fail.
12+
13+
The corresponding test DynamicPermissionsTest is also updated in the
14+
other CL: ag/27073864
15+
16+
Bug: 321711213
17+
Test: DynamicPermissionsTest on sc-dev and tm-dev locally
18+
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:0ead58f69f5de82b00406316b333366d556239f1)
19+
Merged-In: Ia146d4098643d9c473f8c83d33a8a125a53101fc
20+
Change-Id: Ia146d4098643d9c473f8c83d33a8a125a53101fc
21+
---
22+
.../server/pm/permission/PermissionManagerServiceImpl.java | 2 +-
23+
1 file changed, 1 insertion(+), 1 deletion(-)
24+
25+
diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
26+
index 1ec3403a9d46..3e06df908858 100644
27+
--- a/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
28+
+++ b/services/core/java/com/android/server/pm/permission/PermissionManagerServiceImpl.java
29+
@@ -677,7 +677,7 @@ public void removePermission(String permName) {
30+
if (bp == null) {
31+
return;
32+
}
33+
- if (bp.isDynamic()) {
34+
+ if (!bp.isDynamic()) {
35+
// TODO: switch this back to SecurityException
36+
Slog.wtf(TAG, "Not allowed to modify non-dynamic permission "
37+
+ permName);

0 commit comments

Comments
 (0)