Commit 101b2ad7 authored by Jim Meyering's avatar Jim Meyering Committed by Facebook Github Bot 6

folly/.../ExceptionTracerLib.cpp: provide less DOF fodder (avoid heap use-after-free)

Summary:
Before this change, an application would fail consistently with a shutdown-time heap use-after-free (i.e., destructor-order-fiasco when one of the following symbols was used after its static-destruction-triggered free):

  DECLARE_CALLBACK(CxaThrow);
  DECLARE_CALLBACK(CxaBeginCatch);
  DECLARE_CALLBACK(CxaRethrow);
  DECLARE_CALLBACK(CxaEndCatch);
  DECLARE_CALLBACK(RethrowException);

Each of those would define a classic meyers singleton.
Since each destructor is trivial, we can fix this by making each a pseudo-leaky (indestructible) meyers singleton instead. Since each static value is never destroyed,
it can never cause a DOF error again.

Differential Revision: D3870740

fbshipit-source-id: 625f5d5268768ca0e4125bed72bc66c53618be29
parent 6848287d
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <vector> #include <vector>
#include <folly/Indestructible.h>
#include <folly/Portability.h> #include <folly/Portability.h>
#include <folly/SharedMutex.h> #include <folly/SharedMutex.h>
#include <folly/Synchronized.h> #include <folly/Synchronized.h>
...@@ -69,13 +70,13 @@ class CallbackHolder { ...@@ -69,13 +70,13 @@ class CallbackHolder {
namespace folly { namespace folly {
namespace exception_tracer { namespace exception_tracer {
#define DECLARE_CALLBACK(NAME) \ #define DECLARE_CALLBACK(NAME) \
CallbackHolder<NAME##Type>& get##NAME##Callbacks() { \ CallbackHolder<NAME##Type>& get##NAME##Callbacks() { \
static CallbackHolder<NAME##Type> Callbacks; \ static Indestructible<CallbackHolder<NAME##Type>> Callbacks; \
return Callbacks; \ return *Callbacks; \
} \ } \
void register##NAME##Callback(NAME##Type callback) { \ void register##NAME##Callback(NAME##Type callback) { \
get##NAME##Callbacks().registerCallback(callback); \ get##NAME##Callbacks().registerCallback(callback); \
} }
DECLARE_CALLBACK(CxaThrow); DECLARE_CALLBACK(CxaThrow);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment