From: Anton Likhtarov Date: Thu, 2 Oct 2014 20:23:20 +0000 (-0700) Subject: Add extra assertions in ExternalUnixAddr::free() X-Git-Tag: v0.22.0~301 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=692a99ce1ebe37052b275b45f615136422236e73;p=folly.git 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 --- 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; } };