Commit Graph

111060 Commits

Author SHA1 Message Date
Bernardo Rufino
5e5d776906 Use appendFrom in LazyValue.writeToParcel()
Due to lazy bundle, we can now have bundles touching the original parcel
(used to create the bundle in the first place) during serialization.
This can lead to races within the same bundle or across bundles when
the same is copied.

Both these cases happen in notification manager when it's about to post
notification for its listeners. In summary, it notifies all the
listeners in oneway calls and the listeners make a call back to
system_server to retrieve the notification. These calls back can race
and lead to the bug observed in http://b/198355758#comment12.

In order to avoid that we use appendFrom(mSource, mPosition) in
LazyValue.writeToParcel() since that method doesn't change or use the
cursor of mSource. We only ever write to mSource before creating all the
LazyValues, so there can't be any r/w races.

Test: 1. Attach debugger to system server and put log breakpoints in
         racy lines in Parcel$LazyValue.writeToParcel
      2. atest -d CtsHostsideNetworkTests:com.android.cts.net.HostsideRestrictBackgroundNetworkTests#testDozeModeMetered_enabledButWhitelistedOnNotificationAction
      3. Observe no crashes
Test: 1. Attach debugger as in previous "Test:" line
      2. Create a notification with a parcelable extra, post it
      3. Observe no crashes
Bug: 195622897
Bug: 198355758
Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest
Change-Id: I02f890d22910c69e29e791b55d3655962a6dddfd
2021-09-08 09:19:58 +01:00
Bernardo Rufino
c087f62482 Don't throw for LazyValue in Parcel.hasFileDescriptors()
In aosp/1819733 we extracted Parcel.hasFileDescriptor() for types
produced by Parcel.writeValue() and consumed by Parcel.readValue() out
of Bundle into Parcel. It's supposed to handle LazyValue too.

However, we put a check to verify that it was a type supported by
readValue()/writeValue() by retrieving the VAL_XXX type of the value via
Parcel.getValueType(), however, that method throws for LazyValue since
we don't actually write that special type on the wire. However, we still
want Parcel.hasFileDescriptor() to support it, so moving the check into
a last 'else' statement, making sure we don't throw in case the value is
a LazyValue.

Bug: 195622897
Bug: 198433827
Test: atest CtsNetTestCases android.net.cts.CaptivePortalTest#testCaptivePortalIsNotDefaultNetwork
Change-Id: I1e6ec122557c12e74db6890e1631fec3cefe31f6
2021-09-06 08:51:21 +01:00
Jooyung Han
01da4566ee Merge "Revert "AIDL: use typed Map"" 2021-09-01 00:20:02 +00:00
Bernardo Rufino
93b4b55ee7 Merge "Lazy bundle" 2021-08-31 09:18:47 +00:00
Treehugger Robot
c2cbf5d420 Merge "devicepolicy: use typed List<String> in AIDL" 2021-08-31 09:16:30 +00:00
Jooyung Han
f306e46365 Revert "AIDL: use typed Map"
This reverts commit 553c027bbf.

Reason for revert: b/197550396

Change-Id: I3c59d132985a3d21a11b55ba1546ed9f46f6e474
2021-08-31 00:49:37 +00:00
Jakub Pawlowski
54beaf2012 Merge "csip: Add constants for the Coordinated Set Identification Profile" 2021-08-30 20:56:25 +00:00
Bernardo Rufino
9ca6a5e21a Lazy bundle
Implement lazy deserialization for custom types in bundle:
* Parcelable (VAL_PARCELABLE)
* Serializable (VAL_SERIALIZABLE)
* Parcelable array (VAL_PARCELABLEARRAY)
* Lists (VAL_LIST)
* Sparse array (VAL_SPARSEARRAY)
* Bundle (VAL_BUNDLE)

This enhances security, makes bundles more robust to deserialization
errors and avoid deserializing unneeded objects in some cases*, for more
details check go/lazy-bundle.

To do that, we prefix those types with their length when writing them on
the wire. Map serialization and deserialization now happens inside
Bundle (instead of calling Parcel's readArrayMapInternal() /
writeArrayMapInternal()) and we use an intermediary object - LazyValue -
that holds information about the position and length of the value we
will deserialize when queried.

So, there are basically 3 states:

1. We received the bundle but haven't queried anything about it (not
   even isEmpty()): in this case the original parcel is held inside and
   we haven't attempted any deserialization (except for the metadata at
   the beginning such as the magic, etc)

2. We queried something on it (eg. isEmpty()): Now we deserialize the
   bundle skipping the custom values above (we're able to do this now
   with the length written on the wire) and instead placing LazyValue
   objects for them in the map.

3. We query one of the lazy values: Now, we deserialize the object
   represented by LazyValue and replace it on the map.

Since after (2) LazyValue objects are the only ones holding references
to the original Parcel, when all LazyValues are deserialized, the
original Parcel is available for GC.

Inside bundle now we differentiate between unparcel(itemwise = true) and
unparcel(itemwise = false) where the first also deserializes each item
(such that there are no LazyValues in the map). This is because some
operations such as kindofEquals() need all items deserialized.

I had to break a few methods in parcel into multiple methods in parcel
to be able to control the format in bundle. They are all @hide.

* In quick local experiments, counting the bytes that didn't need to be
deserialized after the change. Roughly 10% of bytes from custom-type
items in Bundle are not deserialized in the testing scenario (if I
haven't messed up the stats :). That's on a sdk_gphone_x86_64_arm64 a
few minutes after boot. Check
https://screenshot.googleplex.com/53uXrrqDMYahzg3, stats collection is
on ag/15403076.

Test: atest -d android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest
Test: Boot device
Bug: 195622897
Change-Id: Icfe8880cad00c3cd2afcbe4b92400ad4579e680e
2021-08-27 14:53:24 +01:00
Treehugger Robot
2c0b1b672e Merge "Correct comments" 2021-08-25 07:04:22 +00:00
Łukasz Rymanowski
c1b80e05e8 csip: Add constants for the Coordinated Set Identification Profile
Bug: 150670922
Tag: #feature
Test: compilation
Sponsor: jpawlowski@
Change-Id: I331fe270b75f306d57a15933ab4afa2e48c8bf50
2021-08-24 08:35:01 +00:00
Treehugger Robot
497e28ecf3 Merge "OverlayManager: use typed collection type in AIDL" 2021-08-24 01:47:11 +00:00
Jooyung Han
4d9fc0aea9 devicepolicy: use typed List<String> in AIDL
Bug: 192615532
Test: m
Merged-In: I0ea1c35f7ce4dd6f6bde02874e02ed190fa2e904
Change-Id: I0ea1c35f7ce4dd6f6bde02874e02ed190fa2e904
2021-08-24 09:11:54 +09:00
Treehugger Robot
0ce930a02e Merge "ServiceManager APIs for Wi-Fi mainline module" 2021-08-23 19:25:20 +00:00
Treehugger Robot
95d77312a9 Merge "Add a system api to fetch uuids by the specific transport" 2021-08-23 19:23:26 +00:00
Makoto Onuki
f4d7116b49 Merge "Change Shallow Copy to Deep Copy in UsageStats" 2021-08-23 19:17:38 +00:00
Steven Moreland
ce81994f5f ServiceManager APIs for Wi-Fi mainline module
ServiceManager.waitForDeclaredService and .isDeclared needed for Wi-Fi mainline module.

Test: boot
Change-Id: I9e82dd1a6663396f1c79bc3f27c36711b0b6f3eb
2021-08-20 22:21:35 +00:00
Keun young Park
39c4f40746 Add SharedMemory.fromFileDescriptor
- Rename existing SharedMemory.create and make it public
- Passed file is now detached after creating shared memory and is
  not usable any more.

Bug: 188780895
CTS-Coverage-Bug: 197226773
Test: atest com.android.car.internal.test.LargeParcelableJavaStableAIDLTest
      (runs only in auto. will add matching CTS tests for non-auto devices)

(This combines two CL in internal tree, so Change-Id and Merged-In id are
different)
Change-Id: I8a634062d10ff0c114f3add1d2a5e8056f17b788
Merged-In: I11381e78580b97982b25a52aa06f2192def7353f
2021-08-20 01:18:11 +00:00
Alice Kuo
ee29136541 Add a system api to fetch uuids by the specific transport
The functionality is similar with fetchUuidsWithSdp which uses TRANSPORT_AUTO. Bt stack depends on the devie type and address type to do sdp or gatt service discovery. Add an api to specific the transport. It would be fexible to handle the dual mode device.

Tag: #feature
Bug: 197195548
Test: atest BluetoothInstrumentationTests
Test: Take two headphone to test the dual mode behavior
Change-Id: I32c8dde68969e0bdc42e4e898c43a4f2c1d3379a
Merged-In: I32c8dde68969e0bdc42e4e898c43a4f2c1d3379a
2021-08-19 15:29:32 +00:00
Jooyung Han
8ed699e610 OverlayManager: use typed collection type in AIDL
Use Map<K,V> and List<V>.

Bug: 192615532
Test: m
Change-Id: I5ad7f67b4b08b646362a58214c3b62cd1ada28c0
2021-08-19 15:56:48 +09:00
Jooyung Han
54a1fd2e0f tuner: use typed Map<String, String>
Bug: 192615532
Test: m
Change-Id: Ifa4c9c56d642e1047397cc185872f76a5970f944
2021-08-19 15:29:23 +09:00
Treehugger Robot
6e3ea69863 Merge "Update OWNERS for Intent* and Content*" 2021-08-17 23:14:07 +00:00
Makoto Onuki
ea8407635c Update OWNERS for Intent* and Content*
Test: Build
Change-Id: I2232342d3e68cc8e1eea14bfa999f32b15ba5789
2021-08-17 14:27:35 -07:00
Treehugger Robot
dee731ad0b Merge "Suppress AIDL warnings: untyped-collection" 2021-08-17 11:46:23 +00:00
zhuyunyi
afcd22acaa Change Shallow Copy to Deep Copy in UsageStats
There are three reference type members in UsageStats's constructor, when using "new UsageStats(stats)" to copy, it will be a Shallow Copy, which may cause concurrent modify problem.

For example, in UserUsageStatsService.java, the sUsageStatsCombiner is using "new UsageStats(stats.packageStats.valueAt(i)" to copy, and the value is passing to the computeCacheQuotaHints in
CacheQuotaStrategy.java. If we change the UsageStats.mForegroundServices at the same time, IndexOutOfBounds Exception will happen.

Therefore, it is necessary to modify the way of copying of the UsageStats.

Signed-off-by: zhuyunyi <zhuyunyi@xiaomi.com>
Change-Id: I58a54d17aad6ef5213e52658ee3387f3069339af
2021-08-17 14:10:39 +08:00
Treehugger Robot
bfc5088c1d Merge "Update OWNERS." 2021-08-17 03:57:07 +00:00
Joe Bolinger
2fc9e3fa0a Update OWNERS.
Test: N/A
Change-Id: I3da6e85dd944ca19ecfabfacb2e6928500ee0c49
2021-08-16 17:11:15 -07:00
Jooyung Han
553c027bbf AIDL: use typed Map
AIDL supports typed maps, so use it instead of untyped one.

Bug: 192615532
Test: m, TH presubmit
Change-Id: I0fedf05872cbe2025e04ca07ce6c90bc9067b331
2021-08-12 08:38:10 +00:00
Jooyung Han
fb8ebe9f44 Suppress AIDL warnings: untyped-collection
For now AIDL doesn't support Map<String,Integer>, there's no way to fix
it with typed map.

Bug: 192615532
Test: m
Change-Id: Id0011372a0997b4ab9aa700a7c4f8746bff29189
2021-08-12 17:30:32 +09:00
Suren Baghdasaryan
9a740a18df Adding native flag namespace for lmkd.
For experiment flag testing, adding lmkd flag in DeviceConfig.

Bug: 194316048
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: I1f13d6bbb4a9a7fd8825d7e5acde416750271df4
Merged-In: I1f13d6bbb4a9a7fd8825d7e5acde416750271df4
2021-08-11 17:41:41 +00:00
Steven Moreland
b801a513d1 Merge "ServiceManager: waitForService uses allowBlocking" 2021-08-11 17:16:42 +00:00
Steven Moreland
d247e417a2 ServiceManager: waitForService uses allowBlocking
For parity with getService and checkService.

Bug: 194806512
Test: boot
Change-Id: Iecc3f1c6d6ae9bee94252281b416d62f3bf30afd
2021-08-11 17:16:32 +00:00
Treehugger Robot
cf2ef57519 Merge "Require calls to BluetoothA2dp#setBufferLengthMillis to pass a non-negative value" 2021-08-11 04:44:53 +00:00
Rahul Sabnis
465f489430 Require calls to BluetoothA2dp#setBufferLengthMillis to pass a
non-negative value

Tag: #feature
Bug: 194837771
Test: Manual
Merged-In: I3c1d2da1d28a494d8b393c4502521b3f0699adf6
Change-Id: I3c1d2da1d28a494d8b393c4502521b3f0699adf6
2021-08-10 13:57:57 -07:00
Treehugger Robot
6efa908b95 Merge "AdbService sends callback on adb debugging enabled / disabled." 2021-08-10 04:03:11 +00:00
Treehugger Robot
e9e1f5afa7 Merge "IAdbManager.getPairDevices returns FingerprintAndPairDevice[]." 2021-08-10 02:54:06 +00:00
Treehugger Robot
afce05e2e5 Merge changes Icabed06e,I25bc13c6
* changes:
  Bluetooth: Add Media Control Profile
  Bluetooth: Add GATT_INSUFFICIENT_AUTHORIZATION error code
2021-08-10 02:14:33 +00:00
Jakub Tyszkowski
723fe23ce8 Bluetooth: Add Media Control Profile
Tag: #feature
Bug: 150670922
Sponsor: jpawlowski@
Test: compilation
Change-Id: Icabed06e6b1973ecee9cd1d6eeec80c6d2a9d72e
2021-08-09 15:37:52 +00:00
Jakub Tyszkowski
c74aebb4db Bluetooth: Add GATT_INSUFFICIENT_AUTHORIZATION error code
Bug: 150670922
Sponsor: jpawlowski@
Tag: #feature
Test: compilation
Change-Id: I25bc13c658caba48cc37b0f1f253a77fd1336b29
2021-08-09 15:34:22 +00:00
Tom Cherry
92889d10fe Merge "DropBoxManager: use BufferedInputStream when using GZIPInputStream" 2021-08-05 21:56:02 +00:00
Lucas Lin
98d3db878a Merge changes I752c39bd,I00f49555
* changes:
  Fix Ikev2 vpn cannot establish through startLegacyVpn()
  Throw UnsupportedOperationException if startLegacyVpn is called
2021-08-05 06:35:39 +00:00
Tom Cherry
f2473cc12e DropBoxManager: use BufferedInputStream when using GZIPInputStream
GZIPInputStream has a bug (b/195554062) where it uses unbuffered IO
when reading the gzip header.  This triggers the UnbufferedIoViolation
strict mode violation for apps that target API level 28+.

Independently of fixing GZIPInputStream, DropBoxManager can use
BufferedInputStream to take a proactive step against this and future
bugs.

Bug: 195554712
Test: Successfully read gzip dropbox entries from API level 28+ app.
Change-Id: Id539efcb366b3e3d53513a098975b25866ed16ff
2021-08-04 11:32:30 -07:00
Yifan Hong
08fdaa25cb AdbService sends callback on adb debugging enabled / disabled.
Test: pass
Bug: 190867939
Change-Id: Ieebe78e01bec948a1475d1c74a84b95e275fa48e
2021-08-03 14:17:10 -07:00
Yifan Hong
a623e99230 IAdbManager.getPairDevices returns FingerprintAndPairDevice[].
Map is not supported in C++ backend. To compile IAdbManager in C++,
Map is translated into a list of key, value tuples.

Test: pass
Bug: 194829333
Change-Id: I92e3ad29e8a2bfbab3756d2ef5a2db76ba3cc3d9
2021-08-03 14:17:07 -07:00
Yifan Hong
882a6e20b6 PairDevice to structured Parcelable.
Bug: 194829333
Test: pass
Change-Id: I0b44555403113a7f68c865b33b87a85a6847cf21
2021-08-03 14:17:03 -07:00
Yen-Jen Wang
68d79b074c Correct comments
PacProxyInstaller had been renamed to PacProxyService
so any comments that refer to it should be updated
accordingly.

Bug: 194984075
Test: refine comments only
Change-Id: I5d8ed07e804471cfcbcc80eca908b18f6557cf79
2021-08-03 19:41:14 +08:00
Jooyung Han
c65e303681 APK signature verification: use FileChannel#size
RandomAccessFile#length returns 0 for block devices while
FileChannel#size returns the correct size.

APK signature verification utils should work with block-device zip files
when Android is running as a guest OS and APK/APEX files are passed via
block devices.

This is a follow-up of 1257f1505c.

Bug: 193592496
Bug: 192366904
Test: FrameworksServicesTests
Merged-In: I3015fc30574c36c18c0d0c9ae7453d33a1349927
Change-Id: I3015fc30574c36c18c0d0c9ae7453d33a1349927
(cherry picked from commit 310edbe3c7)
2021-08-03 01:26:54 +09:00
lucaslin
3eb2a54e31 Throw UnsupportedOperationException if startLegacyVpn is called
Legacy VPN is deprecated starting from Android S. So this API
shouldn't be called if the initial SDK version of device is
Android S+. Otherwise, UnsupportedOperationException will be
thrown.

Bug: 189808606
Test: 1. make gts && gts-tradefed
      2. run gts --module GtsNetworkStackHostTestCases
Change-Id: I00f49555bbbc8ccf270056f0e4d1bfdd927ef26d
Merged-In: I00f49555bbbc8ccf270056f0e4d1bfdd927ef26d
2021-07-30 14:15:38 +08:00
Chalard Jean
67f0eebdfa Merge "Fix: ConnectivityManager methods crashing with SecurityException" 2021-07-30 05:28:33 +00:00
Martin Brabham
60b797bd5c Add implementation for IRK to parcelable functions.
Bug: 194432570
Test: Manual test app; nRF connect
Tag: #feature
Change-Id: I54ac5e5f105d155a2d2fc826bf1f64cf34573ff9
2021-07-29 09:42:37 -07:00
Chalard Jean
249be21013 Fix: ConnectivityManager methods crashing with SecurityException
Starting in R, some methods in ConnectivityManager like
getNetworkCapabilities started passing the package name from
the context stored in CM to check that the package is really
whom it pretends to be. Unfortunately, in some cases, the
context contains package "android" for an app, and since the
app is not the system, the check fails and crashes the app.

It seems the culprit is updateHttpProxy, which is called by
ProcessList when the PROXY_CHANGE_ACTION broadcast is sent.
If this happens to run between the time the process is created
and the activity thread is "bound", then the mInitialApplication
member is not set, and updateHttpProxy uses a system context.
Since ConnectivityManager caches the context forever in a
static, this leads to subsequent legitimate calls crashing.

Setting the proxy can be deffered until such a time that the
app is bound, as it can't run any code before then. The member
is never reset to null, so it's guaranteed to be non-null at
bind time.

An alternative would be to post a runnable on the handler
thread if the member is null to try again later. This
could however run the lambda a considerable number of times
as binding can be delayed, and risks causing an infinite loop
if some invariants are changed in the future.

See also b/73572062 and ag/4056059

Bug: 155549446
Bug: 189360509
Test: ActivityThreadTest FrameworksNetTests NetworkStackTests
Test: Manually set a proxy, observe the broadcast being sent and
      apps not crashing
Change-Id: I956f76be2e0a1a675576511fb394d7ed4354b28a
Merged-In: I956f76be2e0a1a675576511fb394d7ed4354b28a
2021-07-29 13:18:54 +09:00