diff options
| author | 2021-02-08 17:08:41 -0800 | |
|---|---|---|
| committer | 2021-02-08 17:08:41 -0800 | |
| commit | fb4f4073f6eae95d236687a857e64acf262fa215 (patch) | |
| tree | b60fd6548ee9bece163b5165163c0cc2ca1b6900 | |
| parent | 2d29d34fe069dcac2792b0f2d76027bdb1493e4c (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.java | 11 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/CachedAppOptimizer.java | 4 |
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) { |