diff --git a/mempool.cc b/mempool.cc
index f445b436b0627bb5fb9e6f088053bf152875d2f6..b15555767c5d11dd228c0d2e7120c2895cd01cf6 100644
--- a/mempool.cc
+++ b/mempool.cc
@@ -6,6 +6,7 @@
 #include <new>
 #include <boost/utility.hpp>
 #include <string.h>
+#include "libc/libc.hh"
 
 namespace memory {
 
@@ -271,6 +272,9 @@ extern "C" {
 
 void* malloc(size_t size)
 {
+    if ((ssize_t)size < 0)
+        return libc_error_ptr<void *>(ENOMEM);
+    
     if (size <= memory::pool::max_object_size) {
         size = std::max(size, memory::pool::min_object_size);
         unsigned n = ilog2_roundup(size);