Infinite reboot when OS upgrade from M to N with set Always-on VPN

Symptom : Infinite reboot

Reproduce step :
1. Set the Always-on VPN in M OS
2. OS upgrade from M to N

Reproduce frequency : 100%

Reason of issue :
https://android.googlesource.com/platform/frameworks/base/+/9b74791
As you know, in M OS, Always-on VPN information is stored in keystore with encryted.
However, in N OS, there is no encryption when it put in keystore.
So, You deleted keystore check(locked/unlock) logic on ConnectivityService.
By this reason, when device upgrade to N OS(set Always-on VPN), it goes infinite boot.
(Cannot read old always-on vpn information untill device unlock.)

Solution :
I founded exception handling when this case as follows:
If getting Credentials.LOCKDOWN_VPN information has null value(catch the exception),
updateLockdownVpn returns false value.

Signed-off-by: SangJin Cha <sj.cha@lge.com>
Change-Id: I6fd980152440bb5248aab45e2f8fda448d3f6c7b
This commit is contained in:
sj.cha
2017-01-19 08:48:47 +09:00
parent 7ab1654533
commit a256f19d3a

View File

@@ -3669,7 +3669,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
// Tear down existing lockdown if profile was removed
mLockdownEnabled = LockdownVpnTracker.isEnabled();
if (mLockdownEnabled) {
final String profileName = new String(mKeyStore.get(Credentials.LOCKDOWN_VPN));
byte[] profileTag = mKeyStore.get(Credentials.LOCKDOWN_VPN);
if (profileTag == null) {
Slog.e(TAG, "Lockdown VPN configured but cannot be read from keystore");
return false;
}
String profileName = new String(profileTag);
final VpnProfile profile = VpnProfile.decode(
profileName, mKeyStore.get(Credentials.VPN + profileName));
if (profile == null) {