From 692a99ce1ebe37052b275b45f615136422236e73 Mon Sep 17 00:00:00 2001 From: Anton Likhtarov Date: Thu, 2 Oct 2014 13:23:20 -0700 Subject: [PATCH] Add extra assertions in ExternalUnixAddr::free() Summary: Memory corruption investigation Test Plan: fbconfig folly/test:network_address_test; fbmake runtests Reviewed By: davejwatson@fb.com Subscribers: trunkagent, andrii, njormrod FB internal diff: D1592539 Tasks: 5230657 Blame Revision: D1575098 --- folly/SocketAddress.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/folly/SocketAddress.h b/folly/SocketAddress.h index f2b1de12..5ae966af 100644 --- a/folly/SocketAddress.h +++ b/folly/SocketAddress.h @@ -509,17 +509,23 @@ class SocketAddress { struct sockaddr_un *addr; socklen_t len; + /* For debugging only, will be removed */ + uint64_t magic; + static constexpr uint64_t kMagic = 0x1234faceb00c; + socklen_t pathLength() const { return len - offsetof(struct sockaddr_un, sun_path); } void init() { addr = new sockaddr_un; + magic = kMagic; addr->sun_family = AF_UNIX; len = 0; } void init(const ExternalUnixAddr &other) { addr = new sockaddr_un; + magic = kMagic; len = other.len; memcpy(addr, other.addr, len); // Fill the rest with 0s, just for safety @@ -527,11 +533,14 @@ class SocketAddress { sizeof(struct sockaddr_un) - len); } void copy(const ExternalUnixAddr &other) { + CHECK(magic == kMagic); len = other.len; memcpy(addr, other.addr, len); } void free() { + CHECK(magic == kMagic); delete addr; + magic = 0; } }; -- 2.34.1