diff options
author | Johannes Carlsson <johannes.carlsson.x@sonyericsson.com> | 2010-06-30 08:45:55 +0200 |
---|---|---|
committer | Kenneth Andersson <kenneth.andersson@sonyericsson.com> | 2010-07-02 10:20:55 +0200 |
commit | 3372f2e259247810627fd22033406163284f4f64 (patch) | |
tree | 8f79b47f5ef201179a5383b8b0a021055292fde0 | |
parent | dd1880ee5bea09e9d37c6db29ef20e49d619c094 (diff) | |
download | frameworks_base-3372f2e259247810627fd22033406163284f4f64.zip frameworks_base-3372f2e259247810627fd22033406163284f4f64.tar.gz frameworks_base-3372f2e259247810627fd22033406163284f4f64.tar.bz2 |
Corrected buffer overflow when parsing /proc/wakelocks
The android_os_Process_parseProcLineArray in android_util_Process.cpp
writes up to buffer[endIndex]. This sometimes caused an assert to be
triggered in NewStringUTF when the output from /proc/wakelocks was
larger than 4096 bytes. The buffer was also increased in order to be
able to parse all wakelocks completely.
Change-Id: Idf8e66d61ad979377569048f59c3eee278b146db
-rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index aadb576..167e45d 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -844,7 +844,7 @@ public final class BatteryStatsImpl extends BatteryStats { private final Map<String, KernelWakelockStats> readKernelWakelockStats() { - byte[] buffer = new byte[4096]; + byte[] buffer = new byte[8192]; int len; try { @@ -891,9 +891,11 @@ public final class BatteryStatsImpl extends BatteryStats { for (endIndex=startIndex; endIndex < len && wlBuffer[endIndex] != '\n' && wlBuffer[endIndex] != '\0'; endIndex++); - // Don't go over the end of the buffer - if (endIndex < len) { - endIndex++; // endIndex is an exclusive upper bound. + endIndex++; // endIndex is an exclusive upper bound. + // Don't go over the end of the buffer, Process.parseProcLine might + // write to wlBuffer[endIndex] + if (endIndex >= (len - 1) ) { + return m; } String[] nameStringArray = mProcWakelocksName; |