summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Moreland <smoreland@google.com>2018-06-27 21:16:18 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-06-27 21:16:18 -0700
commit3f3ff1aca3ec4d17fd0e6a0d3f23108ddcc95134 (patch)
treed638624afaff061ebb012e2c7706046a43e72a16
parentf43ab1947c74dad5164f5a6398b2dd7db02e8641 (diff)
parentd97d2321b0c4a2c98aabefb7f3802e4404566ca4 (diff)
downloadlibhidl-pie-qpr1-release.tar.gz
am: d97d2321b0 Change-Id: I27e15521bf8d27df69ffe4e144b38d895c85e803
-rw-r--r--transport/HidlBinderSupport.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/transport/HidlBinderSupport.cpp b/transport/HidlBinderSupport.cpp
index d14887f..4f8d7c5 100644
--- a/transport/HidlBinderSupport.cpp
+++ b/transport/HidlBinderSupport.cpp
@@ -19,6 +19,7 @@
#include <hidl/HidlBinderSupport.h>
// C includes
+#include <inttypes.h>
#include <unistd.h>
// C++ includes
@@ -66,6 +67,15 @@ status_t readEmbeddedFromParcel(const hidl_memory& memory,
parentOffset + hidl_memory::kOffsetOfName);
}
+ // hidl_memory's size is stored in uint64_t, but mapMemory's mmap will map
+ // size in size_t. If size is over SIZE_MAX, mapMemory could succeed
+ // but the mapped memory's actual size will be smaller than the reported size.
+ if (memory.size() > SIZE_MAX) {
+ ALOGE("Cannot use memory with %" PRId64 " bytes because it is too large.", memory.size());
+ android_errorWriteLog(0x534e4554, "79376389");
+ return BAD_VALUE;
+ }
+
return _hidl_err;
}