Add the crash-on-failure behavior to bmalloc-based fastMalloc
authordarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Feb 2015 04:54:03 +0000 (04:54 +0000)
committerdarin@apple.com <darin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Feb 2015 04:54:03 +0000 (04:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=141434

Reviewed by Alexey Proskuryakov.

* wtf/FastMalloc.cpp: Removed unneeded includes.
(WTF::fastMalloc): Added null check and CRASH.
(WTF::fastCalloc): Added overflow checking, null check, and CRASH.
(WTF::fastRealloc): Added null check and CRASH.
(WTF::fastMallocSize): Added FIXME comment.
(WTF::fastMallocGoodSize): Added FIXME comment.
(WTF::fastAlignedMalloc): Added null check and CRASH.
(WTF::tryFastMalloc): Changed to call bmalloc directly instead of
calling fastMalloc, since fastMalloc will now crash on failure.
(WTF::tryFastRealloc): Changed to call bmalloc directly instead of
calling fastRealloc, since fastRealloc will now crash on failure.
(WTF::tryFastCalloc): Added overflow checking.
(WTF::fastMallocStatistics): Added FIXME comment.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@179915 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/FastMalloc.cpp

index 1895313b23ebd93c3f40e2b553ba859911032a50..88986ac48538997f815578c04dc142d6e7b9d689 100644 (file)
@@ -1,3 +1,24 @@
+2015-02-10  Darin Adler  <darin@apple.com>
+
+        Add the crash-on-failure behavior to bmalloc-based fastMalloc
+        https://bugs.webkit.org/show_bug.cgi?id=141434
+
+        Reviewed by Alexey Proskuryakov.
+
+        * wtf/FastMalloc.cpp: Removed unneeded includes.
+        (WTF::fastMalloc): Added null check and CRASH.
+        (WTF::fastCalloc): Added overflow checking, null check, and CRASH.
+        (WTF::fastRealloc): Added null check and CRASH.
+        (WTF::fastMallocSize): Added FIXME comment.
+        (WTF::fastMallocGoodSize): Added FIXME comment.
+        (WTF::fastAlignedMalloc): Added null check and CRASH.
+        (WTF::tryFastMalloc): Changed to call bmalloc directly instead of
+        calling fastMalloc, since fastMalloc will now crash on failure.
+        (WTF::tryFastRealloc): Changed to call bmalloc directly instead of
+        calling fastRealloc, since fastRealloc will now crash on failure.
+        (WTF::tryFastCalloc): Added overflow checking.
+        (WTF::fastMallocStatistics): Added FIXME comment.
+
 2015-02-10  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GTK] GMutexLocker build issue
index acc5a7062efac7cdbb2fb9130e5cd5ac7613287a..9b15ac070a055b2f7467f01ca042154d1b49583f 100644 (file)
@@ -1,6 +1,6 @@
 // Copyright (c) 2005, 2007, Google Inc.
 // All rights reserved.
-// Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011, 2015 Apple Inc. All rights reserved.
+// Copyright (C) 2005-2009, 2011, 2015 Apple Inc. All rights reserved.
 // 
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 #include "config.h"
 #include "FastMalloc.h"
 
-#include "Assertions.h"
+#include "CheckedArithmetic.h"
 #include "CurrentTime.h"
-
 #include <limits>
+#include <string.h>
+#include <wtf/DataLog.h>
+
 #if OS(WINDOWS)
 #include <windows.h>
 #else
 #include <pthread.h>
 #endif
-#include <string.h>
-#include <wtf/DataLog.h>
-#include <wtf/StdLibExtras.h>
 
 #if OS(DARWIN)
 #include <mach/mach_init.h>
@@ -273,37 +272,55 @@ namespace WTF {
 
 void* fastMalloc(size_t size)
 {
-    return bmalloc::api::malloc(size);
+    void* result = bmalloc::api::malloc(size);
+    if (!result)
+        CRASH();
+    return result;
 }
 
 void* fastCalloc(size_t numElements, size_t elementSize)
 {
-    return fastZeroedMalloc(numElements * elementSize);
+    Checked<size_t> checkedSize = elementSize;
+    checkedSize *= numElements;
+    void* result = fastZeroedMalloc(checkedSize.unsafeGet());
+    if (!result)
+        CRASH();
+    return result;
 }
-    
+
 void* fastRealloc(void* object, size_t size)
 {
-    return bmalloc::api::realloc(object, size);
+    void* result = bmalloc::api::realloc(object, size);
+    if (!result)
+        CRASH();
+    return result;
 }
-    
+
 void fastFree(void* object)
 {
     bmalloc::api::free(object);
 }
-    
+
 size_t fastMallocSize(const void*)
 {
+    // FIXME: This is incorrect; best fix is probably to remove this function.
+    // Caller currently are all using this for assertion, not to actually check
+    // the size of the allocation, so maybe we can come up with something for that.
     return 1;
 }
-    
+
 size_t fastMallocGoodSize(size_t size)
 {
+    // FIXME: This is non-helpful; fastMallocGoodSize will be removed soon.
     return size;
 }
-    
+
 void* fastAlignedMalloc(size_t alignment, size_t size) 
 {
-    return bmalloc::api::memalign(alignment, size);
+    void* result = bmalloc::api::memalign(alignment, size);
+    if (!result)
+        CRASH();
+    return result;
 }
 
 void fastAlignedFree(void* p) 
@@ -313,17 +330,21 @@ void fastAlignedFree(void* p)
 
 TryMallocReturnValue tryFastMalloc(size_t size)
 {
-    return fastMalloc(size);
+    return bmalloc::api::malloc(size);
 }
     
-TryMallocReturnValue tryFastRealloc(void* p, size_t n)
+TryMallocReturnValue tryFastRealloc(void* object, size_t size)
 {
-    return fastRealloc(p, n);
+    return bmalloc::api::realloc(object, size);
 }
     
 TryMallocReturnValue tryFastCalloc(size_t numElements, size_t elementSize)
 {
-    return tryFastZeroedMalloc(numElements * elementSize);
+    Checked<size_t, RecordOverflow> checkedSize = elementSize;
+    checkedSize *= numElements;
+    if (checkedSize.hasOverflowed())
+        return nullptr;
+    return tryFastZeroedMalloc(checkedSize.unsafeGet());
 }
     
 void releaseFastMallocFreeMemoryForThisThread()
@@ -338,6 +359,7 @@ void releaseFastMallocFreeMemory()
 
 FastMallocStatistics fastMallocStatistics()
 {
+    // FIXME: This is incorrect; needs an implementation or to be removed.
     FastMallocStatistics statistics = { 0, 0, 0 };
     return statistics;
 }