Index: mojo/system/memory.cc |
diff --git a/mojo/system/memory.cc b/mojo/system/memory.cc |
index 633b2bef4adb28f34e4c2129fe5d82835fce6e20..a10b021cedc035e3f669d9eea0d25c91a698b4c5 100644 |
--- a/mojo/system/memory.cc |
+++ b/mojo/system/memory.cc |
@@ -11,6 +11,8 @@ |
namespace mojo { |
namespace system { |
+// TODO(vtl): Can I make this use the non-templatized function without a |
+// performance hit? |
template <size_t size> |
bool VerifyUserPointerForSize(const void* pointer, size_t count) { |
if (count > std::numeric_limits<size_t>::max() / size) |
@@ -22,11 +24,25 @@ bool VerifyUserPointerForSize(const void* pointer, size_t count) { |
return count == 0 || !!pointer; |
} |
+bool MOJO_SYSTEM_IMPL_EXPORT VerifyUserPointerForSize(const void* pointer, |
+ size_t size, |
+ size_t count) { |
+ if (count > std::numeric_limits<size_t>::max() / size) |
+ return false; |
+ |
+ // TODO(vtl): If running in kernel mode, do a full verification. For now, just |
+ // check that it's non-null if |size| is nonzero. (A faster user mode |
+ // implementation is also possible if this check is skipped.) |
+ return count == 0 || !!pointer; |
+} |
+ |
// Explicitly instantiate the sizes we need. Add instantiations as needed. |
template MOJO_SYSTEM_IMPL_EXPORT bool VerifyUserPointerForSize<1>( |
const void*, size_t); |
template MOJO_SYSTEM_IMPL_EXPORT bool VerifyUserPointerForSize<4>( |
const void*, size_t); |
+template MOJO_SYSTEM_IMPL_EXPORT bool VerifyUserPointerForSize<8>( |
+ const void*, size_t); |
} // namespace system |
} // namespace mojo |