一、问题现象
手机正常使用过程中重启
二、问题分析
问题代码:NetworkPolicyManagerService.java:2381
private boolean isUidIdle(int uid) {
final String[] packages =
mContext.getPackageManager().getPackagesForUid(uid);
final int userId = UserHandle.getUserId(uid);
//Modified for Defect-2243173 20160603 Begin
if(packages != null){
for (String packageName : packages) {//当packages[]数组为空的时候,此处使用将直接导致系统重启
if (!mUsageStats.isAppIdle(packageName, userId)) {
return false;
}
}
}
//Modified for Defect-2243173 20160603 End
return true;
}
2,用户手机系统重启的log > > Exception Log
Time:[Thu Jun 2 15:30:47 CST 2016] [67916.885470]
Exception Class: Java (JE)
Exception Type: system_server_crash
Current Executing Process:
system_server
Backtrace:
Process: system_server
Build: TCL/5095B/shine_plus:6.0/MRA58K/v1B1Z-0:user/release-keys
java.lang.NullPointerException: Attempt to get length of null array at
com.android.server.net.NetworkPolicyManagerService.isUidIdle(NetworkPolicyManagerService.java:2381)
at com.android.server.net.NetworkPolicyManagerService.updateRuleForAppIdleLocked(NetworkPolicyManagerService.java:2310)
at com.android.server.net.NetworkPolicyManagerService.updateRulesForTempWhitelistChangeLocked(NetworkPolicyManagerService.java:2361)
at com.android.server.net.NetworkPolicyManagerService$3.run(NetworkPolicyManagerService.java:591)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:207)
at android.os.HandlerThread.run(HandlerThread.java:61)
Android M漏洞会导致进 程重启,若是该漏洞代码位于system_server进程,那
么 就会出现今天用户遇到的手机重启问题.