From bbcf719f9ab6db876d5d69c763cdf793540622e0 Mon Sep 17 00:00:00 2001 From: Connor O'Brien Date: Mon, 27 Feb 2017 12:21:39 -0800 Subject: [PATCH] libmemtrack: check return value for getMemory() libmemtrack does not report an error when the binderized memtrack service dies during a call to getMemory, so a crash in the memtrack service can result in the calling process (e.g. system_server) crashing as well. Add an error check to avoid this problem. Bug: 35728498 Test: adb shell kill -9 $(adb shell pidof android.hardware.memtrack@1.0-service) Change-Id: I852d8dfcbc1c92a95f8fe249b607dea8eb01f06a Signed-off-by: Connor O'Brien --- libmemtrack/memtrack.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libmemtrack/memtrack.cpp b/libmemtrack/memtrack.cpp index e83f18189..c5e74c103 100644 --- a/libmemtrack/memtrack.cpp +++ b/libmemtrack/memtrack.cpp @@ -31,6 +31,7 @@ using android::hardware::memtrack::V1_0::MemtrackRecord; using android::hardware::memtrack::V1_0::MemtrackFlag; using android::hardware::memtrack::V1_0::MemtrackStatus; using android::hardware::hidl_vec; +using android::hardware::Return; struct memtrack_proc_type { MemtrackType type; @@ -69,7 +70,7 @@ static int memtrack_proc_get_type(memtrack_proc_type *t, if (memtrack == nullptr) return -1; - memtrack->getMemory(pid, type, + Return ret = memtrack->getMemory(pid, type, [&t, &err](MemtrackStatus status, hidl_vec records) { if (status != MemtrackStatus::SUCCESS) { err = -1; @@ -81,7 +82,7 @@ static int memtrack_proc_get_type(memtrack_proc_type *t, t->records[i].flags = records[i].flags; } }); - return err; + return ret.isOk() ? err : -1; } /* TODO: sanity checks on return values from HALs: