Commit Graph

3757 Commits

Author SHA1 Message Date
Hugo Benichi
064d6efe21 Merge \\"Fix unsafe concurrent access in LegacyTypeTracker\\" am: 02a0bce25a
am: 5f8aae1831

Change-Id: I20a3426002ebe6f4db9de7edf7c4072d0a27dbdc
2016-07-12 13:20:56 +00:00
Hugo Benichi
5f8aae1831 Merge \"Fix unsafe concurrent access in LegacyTypeTracker\"
am: 02a0bce25a

Change-Id: I928b2c6ef8e20e197425c214242287185a9daa06
2016-07-12 13:15:41 +00:00
Treehugger Robot
02a0bce25a Merge "Fix unsafe concurrent access in LegacyTypeTracker" 2016-07-12 13:08:21 +00:00
Hugo Benichi
ea37259312 Fix unsafe concurrent access in LegacyTypeTracker
This patch adds synchronization inside LegacyTypeTracker so that
getNetworkForType() can safely run concurrently with remove().

Without synchronization if remove() removes the last network for a
given type while getNetworkForType() runs for the same type, it is
possible that getNetworkForType tries to access the head of an empty
list, resulting in a runtime exception.

This issue was found by zoran.jovanovic@sonymobile.com who proposed a
fix in AOSP (Change-Id: Ia963662edb9d643790e8d9439e4dbdcac4c2187b).

This patch differs from the fix proposed by the bug reporter and tries
instead to do the minimum amount of locking to make getNetworkForType
safe.

Bug: 29030387

(cherry picked from commit 389633f8d2)

Change-Id: I915aac527fc8828b32bf35fee870add2dfb11d8d
2016-07-12 21:56:40 +09:00
Hugo Benichi
2010894591 ConnectivityService dump: add apps blocked logs am: d159fdd226
am: 111516c8d1

Change-Id: If0842e480b448cbbcb9fff3a03e6e9d84a385c89
2016-07-12 04:44:21 +00:00
Hugo Benichi
111516c8d1 ConnectivityService dump: add apps blocked logs
am: d159fdd226

Change-Id: I50c87dc35ef219844a5337768ec2526aeff4f1ca
2016-07-12 04:39:05 +00:00
Hugo Benichi
d159fdd226 ConnectivityService dump: add apps blocked logs
This patch adds NetworkInfo BLOCKED/UNBLOCKED status of apps to
ConnectivityService's dump logs.

The BLOCKED or UNBLOCKED status of an app is logged with the app uid
when the app calls getActiveNetworkInfo().

Examples:
mNetworkInfoBlockingLogs (most recent first):
  07-11 11:04:43.139 - BLOCKED 10060
  07-11 11:04:39.056 - UNBLOCKED 10061
  07-11 11:04:38.851 - BLOCKED 10061

Bug: 29981766
Change-Id: I6e2fde446702b92b0964ed894409b5d733d8f8a7
2016-07-12 11:39:48 +09:00
Erik Kline
3e5de27d07 Support requesting async LinkProperties/NetworkCapabilities updates am: 0c04b74781
am: b2bdeca8e2

Change-Id: If177966a19c830a106ce689c7e07a7835bb2c1a1
2016-07-12 01:46:09 +00:00
Erik Kline
78b05827f9 Basic IPv6 Router Advertisement daemon am: 1a1cb0e914
am: 78bf01826a

Change-Id: I30627432d5736a17248aa90b225d08244a4dee5d
2016-07-12 01:46:01 +00:00
Erik Kline
b2bdeca8e2 Support requesting async LinkProperties/NetworkCapabilities updates
am: 0c04b74781

Change-Id: Icc048323debbbe641941c5c0d993f4c9782c5d3e
2016-07-11 11:01:42 +00:00
Erik Kline
78bf01826a Basic IPv6 Router Advertisement daemon
am: 1a1cb0e914

Change-Id: I242eb8e932581a537a47f31e3f16c7e776da91cf
2016-07-11 10:38:49 +00:00
Erik Kline
0c04b74781 Support requesting async LinkProperties/NetworkCapabilities updates
Bug: 9580643
Change-Id: I1d7ba7645c20d7d53f6eef777dfce43727940f13
2016-07-11 19:17:41 +09:00
Erik Kline
1a1cb0e914 Basic IPv6 Router Advertisement daemon
Bug: 9580643
Change-Id: Iebd4d1f694699ffd4daf7d71e9b9d8f49e9b632f
2016-07-11 18:37:25 +09:00
Lorenzo Colitti
6ce4efc9b2 Merge \\"Rewrite lingering.\\" into nyc-mr1-dev am: 673bdd122b
am: 1ddf62c2a3

Change-Id: Ieff4a63ad1d5959760e69f68e832ca256ec2c2ae
2016-07-07 11:06:53 +00:00
Lorenzo Colitti
1ddf62c2a3 Merge \"Rewrite lingering.\" into nyc-mr1-dev
am: 673bdd122b

Change-Id: I62d69f20101318b42d4d333b104dcf4f64dc1725
2016-07-07 11:01:19 +00:00
Lorenzo Colitti
673bdd122b Merge "Rewrite lingering." into nyc-mr1-dev 2016-07-07 10:55:39 +00:00
Hugo Benichi
652986d462 Merge \\"ConnectivityManager: no double callback remove\\" into nyc-mr1-dev am: 0ecfb2fd34
am: bafb27388b

Change-Id: I8fb5bac2bb6b7665192c8c788d7818d637500935
2016-07-07 09:45:36 +00:00
Hugo Benichi
bafb27388b Merge \"ConnectivityManager: no double callback remove\" into nyc-mr1-dev
am: 0ecfb2fd34

Change-Id: Ib7b10c59c1f7c84ec78c7527fba8a6c9aa5b0c05
2016-07-07 09:38:29 +00:00
TreeHugger Robot
0ecfb2fd34 Merge "ConnectivityManager: no double callback remove" into nyc-mr1-dev 2016-07-07 09:33:35 +00:00
Lorenzo Colitti
f408db9f15 Merge \\"Prepare to delete useless loop in handleReleaseNetworkRequest.\\" into nyc-mr1-dev am: ef9c83a171
am: f035567f74

Change-Id: I68c75cd5980075bdb2586ba5967fcb6ce20dc158
2016-07-07 07:49:13 +00:00
Lorenzo Colitti
f035567f74 Merge \"Prepare to delete useless loop in handleReleaseNetworkRequest.\" into nyc-mr1-dev
am: ef9c83a171

Change-Id: I8cd95575e7758ee94417ec15e407f396434f4c04
2016-07-07 07:40:46 +00:00
TreeHugger Robot
ef9c83a171 Merge "Prepare to delete useless loop in handleReleaseNetworkRequest." into nyc-mr1-dev 2016-07-07 07:33:07 +00:00
Lorenzo Colitti
79869eac2f Rewrite lingering.
The two major changes here are:

- Move lingering out of NetworkMonitor. The fact that lingering
  is currently its own state in NetworkMonitor complicates the
  logic there: while a network is lingering it cannot be in any
  other state, we have to take care not to leave LingeringState
  for the wrong reason, etc.
- Instead of keeping a single per-network boolean to indicate
  whether a network is lingered or not, keep a linger timer for
  every request. This allows us to fix various corner-case bugs
  in lingering.

The changes in behaviour compared to the current code can be seen
in the unit test changes. Specifically:

1. Bug fix: when a network is lingered, and a request is added
   and removed to it, the existing code tears the network down
   immediately. The new code just sends another CALLBACK_LOSING
   and resumes lingering with the original timeout.
2. Bug fix: if cell is unvalidated and wifi comes up and
   validates before cell does (as might happen on boot), the
   existing code immediately tears down cell. The new code
   lingers cell, which is correct because unvalidated cell was
   the default network, so an app might have been using it.
3. Correctness improvement: always send CALLBACK_AVAILABLE for
   the new network before sending CALLBACK_LOSING. This was not
   really an issue in practice, because the usual flow is:
    - Network A is the default.
    - Network B connects, CALLBACK_AVAILABLE.
    - Network B validates, CALLBACK_LOSING.

Bug: 23113288
Change-Id: I2f1e779ff6eb869e62921a95aa9d356f380cf30a
2016-07-07 16:18:57 +09:00
Lorenzo Colitti
a68fb676e6 Prepare to delete useless loop in handleReleaseNetworkRequest.
As explained in the TODO, the loop serves no purpose since only
one network can be satisfying a given request at a time.

Instead of looping, look up the nai in the mNetworkForRequestId
array that exists for this purpose.

Keep the loop around with an Slog.wtf statement on it so we can
see if we ever hit it, and add a TODO to delete it if we don't.

Bug: 23113288
Change-Id: I173de4bd45c5a4169b7a062a981f2ecccaa44143
2016-07-07 14:50:12 +09:00
Lorenzo Colitti
adeeedaeff Merge \"Merge \\"Merge \\\"Make registerDefaultNetwork work on metered networks.\\\" into nyc-dev am: 33cdc4d136 -s ours\\" into nyc-mr1-dev am: 6f93a6c2c3\" into nyc-mr1-dev-plus-aosp
am: fb2ee33cea

Change-Id: I173678ab505e60158335258459c68eddeae124ec
2016-07-07 01:47:42 +00:00
Lorenzo Colitti
a7dc542fa9 Merge \\\"Make registerDefaultNetwork work on metered networks.\\\" into nyc-dev am: 33cdc4d136 am: 8fd1e19e45 -s ours
am: da2688f449

Change-Id: Id4761d4e1a64a20f597286890a95b1c375a0ba05
2016-07-07 01:37:46 +00:00
Android Build Merger (Role)
fb2ee33cea Merge "Merge \"Merge \\"Make registerDefaultNetwork work on metered networks.\\" into nyc-dev am: 33cdc4d136 -s ours\" into nyc-mr1-dev am: 6f93a6c2c3" into nyc-mr1-dev-plus-aosp 2016-07-07 01:33:11 +00:00
Pankaj Kanwar
da2688f449 Merge \\"Make registerDefaultNetwork work on metered networks.\\" into nyc-dev am: 33cdc4d136
am: 8fd1e19e45  -s ours

Change-Id: I71fcfb810a477f5bcc3d7642375c6ef56b747517
2016-07-07 01:32:00 +00:00
Lorenzo Colitti
cf7bdc07e2 Merge \"Merge \\"Make registerDefaultNetwork work on metered networks.\\" into nyc-dev am: 33cdc4d136 -s ours\" into nyc-mr1-dev
am: 6f93a6c2c3

Change-Id: I160e1a702a5e879da775ddf9e360ef5c3d206973
2016-07-07 01:31:50 +00:00
Lorenzo Colitti
27ca325de9 Merge \"Make registerDefaultNetwork work on metered networks.\" into nyc-dev
am: 33cdc4d136  -s ours

Change-Id: Iacee53c01e7de163e677ab57bc2d7044f8aff952
2016-07-07 01:24:58 +00:00
Hugo Benichi
f778e2546f ConnectivityManager: no double callback remove
This patch partially undoes ag/869831 (Change-Id:
Ia42ed7aefaebd8caf3eada8e42b6cb7a940d7647) so that ConnectivityManager
does not remove callbacks from its internal request-to-callback map at
unregistration, but instead let the singleton CallbackHandler do it when
receiving a CALLBACK_RELEASED from ConnectivityService.

ag/869831 was thought to fix b/26749700 that reported a callback leak
from sNetworkCallback, but a finer analysis of the code shows that
callbacks were correctly removed by the CallbackHandler before
ag/869831. There was therefore no callback leak.

Bug: 26749700
Bug: 28537383
Change-Id: I421d889d0e225c0e3d1eebea664f44a1cc0f3191
2016-07-07 09:44:02 +09:00
Lorenzo Colitti
8fd1e19e45 Merge \"Make registerDefaultNetwork work on metered networks.\" into nyc-dev
am: 33cdc4d136

Change-Id: I0ad7b79f1af992dd556de5e17a6a1aae9c46e423
2016-07-06 20:45:09 +00:00
Lorenzo Colitti
fb9c76ffa7 Merge \\"Add test coverage for a bug in the lingering code.\\" into nyc-mr1-dev am: 833c839f0b
am: b2279bc09f

Change-Id: I19439c95167bf215edc67068fb5a6859ab845814
2016-07-05 03:54:35 +00:00
Lorenzo Colitti
b2279bc09f Merge \"Add test coverage for a bug in the lingering code.\" into nyc-mr1-dev
am: 833c839f0b

Change-Id: Ia09ba1e0a6e3ba9543a92ccf7f03f7a898f26fb1
2016-07-05 03:44:29 +00:00
TreeHugger Robot
833c839f0b Merge "Add test coverage for a bug in the lingering code." into nyc-mr1-dev 2016-07-05 03:35:40 +00:00
Lorenzo Colitti
53c4eb01d2 Merge \\"Unbreak unregisterNetworkCallback.\\" into nyc-mr1-dev am: 0271c0d4ef
am: 5a7cd3500d

Change-Id: I7861e8ff7b8528d8468f8217e13398f78be50de5
2016-07-05 02:28:07 +00:00
Lorenzo Colitti
5a7cd3500d Merge \"Unbreak unregisterNetworkCallback.\" into nyc-mr1-dev
am: 0271c0d4ef

Change-Id: I35ee16554e17c503b1f5628629c2c0a48d85d399
2016-07-05 02:19:18 +00:00
Lorenzo Colitti
0271c0d4ef Merge "Unbreak unregisterNetworkCallback." into nyc-mr1-dev 2016-07-05 02:07:06 +00:00
Lorenzo Colitti
70964d3a18 Unbreak unregisterNetworkCallback.
http://ag/1194313 broke unregisterNetworkCallback because the
system does not parcel the type of the request back to the app.
So when the app calls unregisterNetworkCallback, the
NetworkRequest that's passed in does not have a type and thus
doesn't match the request in mNetworkRequests.

Fix this by parceling over the type as well.

This was not caught by the unit test because the unit test all
runs in the same process with no parceling.

Bug: 23113288
Change-Id: I58b2ed651b9bf5cbdcca5b25c3ca24db53cffdf1
2016-07-05 01:59:49 +09:00
Lorenzo Colitti
80cadd694f Merge \\"Annotate public methods in ConnectivityService.\\" into nyc-mr1-dev am: 50d08eec57
am: c256234cbf

Change-Id: I8b0c9ece0d9bfdf8d93628214485c0e059731a6a
2016-07-04 16:30:21 +00:00
Lorenzo Colitti
c256234cbf Merge \"Annotate public methods in ConnectivityService.\" into nyc-mr1-dev
am: 50d08eec57

Change-Id: I065e2ceb351ea8af4310f6ef11f1af232fa2fc79
2016-07-04 16:21:10 +00:00
Lorenzo Colitti
642dac9622 Make registerDefaultNetwork work on metered networks. am: 5c1bf510fb
am: 302dff37cc

Change-Id: Ief2f4c0073f87f7a7e7f33c322365dc4e8eefdeb
2016-07-04 16:16:36 +00:00
TreeHugger Robot
50d08eec57 Merge "Annotate public methods in ConnectivityService." into nyc-mr1-dev 2016-07-04 16:07:33 +00:00
Lorenzo Colitti
302dff37cc Make registerDefaultNetwork work on metered networks.
am: 5c1bf510fb

Change-Id: I2d5edc273df22e5c787f227820c1ce956adfe42c
2016-07-04 16:06:51 +00:00
Lorenzo Colitti
5c1bf510fb Make registerDefaultNetwork work on metered networks.
Bug: 29927488
Change-Id: I3b705c2ab0d1493546ffa5185bb5b07d5e25c897
2016-07-04 23:18:12 +09:00
Lorenzo Colitti
b5b9c71870 Add test coverage for a bug in the lingering code.
Bug: 23113288
Change-Id: I573ee5908b9d973931234eb7d2db8ea0aaa4b31e
2016-07-04 17:00:27 +09:00
Lorenzo Colitti
d645909273 Annotate public methods in ConnectivityService.
Ensure every public method is annotated with why it's public.
This can be either an @Override or @VisibleForTesting annotation
or a comment explaining why it's public.

Bug: 29927488
Change-Id: I3582aef7997dc0d723718ca5e3dd115647d22979
2016-07-04 12:58:29 +09:00
Lorenzo Colitti
41acc1ca8c Merge changes from topic \\'networkrequest_private\\' into nyc-mr1-dev am: 0317e03dc3
am: 9d1139ee06

Change-Id: I09231f4f4f3bd13f6b51fe8117eff7d002cf10dd
2016-07-01 15:27:07 +00:00
Lorenzo Colitti
9d1139ee06 Merge changes from topic \'networkrequest_private\' into nyc-mr1-dev
am: 0317e03dc3

Change-Id: Ia063c378bd32fdb056c0ecdc0f721d32e9fa49af
2016-07-01 15:20:21 +00:00
Lorenzo Colitti
99236d14e3 Make the NetworkRequest list private to NetworkAgentInfo.
This allows us to keep track of how many live requests a network
is satisfying without having to count them every time.

Bug: 23113288
Change-Id: Ic4756676491e09071dbf80b7c48da3be028d68eb
2016-07-01 21:14:26 +09:00