summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Marco Ballesio <balejs@google.com> 2021-02-08 17:08:41 -0800
committer Marco Ballesio <balejs@google.com> 2021-02-08 17:08:41 -0800
commitfb4f4073f6eae95d236687a857e64acf262fa215 (patch)
treeb60fd6548ee9bece163b5165163c0cc2ca1b6900
parent2d29d34fe069dcac2792b0f2d76027bdb1493e4c (diff)
freezer: handle exception in locks file format
Safeguard /proc/locks processing from wrongly formatted /proc/locks files Bug: 179171387 Test: could not reproduce the issue, but verified that no crashes occurred in a prolonged test (4hrs+) Change-Id: Ia8a12903f2e520e51780c8b05876aa1c9083e92b
-rw-r--r--core/java/android/os/Process.java11
-rw-r--r--services/core/java/com/android/server/am/CachedAppOptimizer.java4
2 files changed, 10 insertions, 5 deletions
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 39e3e146f45b..8068c872c4bb 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -1442,7 +1442,7 @@ public class Process {
*
* @hide
*/
- public static boolean hasFileLocks(int pid) throws IOException {
+ public static boolean hasFileLocks(int pid) throws Exception {
BufferedReader br = null;
try {
@@ -1454,8 +1454,13 @@ public class Process {
for (int i = 0; i < 5 && st.hasMoreTokens(); i++) {
String str = st.nextToken();
- if (i == 4 && Integer.parseInt(str) == pid) {
- return true;
+ try {
+ if (i == 4 && Integer.parseInt(str) == pid) {
+ return true;
+ }
+ } catch (NumberFormatException nfe) {
+ throw new Exception("Exception parsing /proc/locks at \" "
+ + line + " \", token #" + i);
}
}
}
diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java
index c18031fd6de6..0afdbdecd610 100644
--- a/services/core/java/com/android/server/am/CachedAppOptimizer.java
+++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java
@@ -1149,7 +1149,7 @@ public final class CachedAppOptimizer {
}
return;
}
- } catch (IOException e) {
+ } catch (Exception e) {
Slog.e(TAG_AM, "Not freezing. Unable to check file locks for " + name + "(" + pid
+ "): " + e);
return;
@@ -1244,7 +1244,7 @@ public final class CachedAppOptimizer {
}
}
}
- } catch (IOException e) {
+ } catch (Exception e) {
Slog.e(TAG_AM, "Unable to check file locks for " + name + "(" + pid + "): " + e);
synchronized (mAm) {
synchronized (mProcLock) {