Commit 355fec90 authored by Seth Hinze's avatar Seth Hinze Committed by Facebook GitHub Bot

Validate IOBuf capacity at construction time

Summary: Add a CHECK() to the IOBuf constructor to ensure the underlying buffer does not include any bytes that have been poisoned by AddressSanitizer.

Reviewed By: yfeldblum

Differential Revision: D25627483

fbshipit-source-id: 5bca59e545c32ba7b61430d7cd4787712eecb204
parent 71255360
......@@ -34,6 +34,7 @@
#include <folly/lang/Align.h>
#include <folly/lang/Exception.h>
#include <folly/memory/Malloc.h>
#include <folly/memory/SanitizeAddress.h>
using std::unique_ptr;
......@@ -498,6 +499,8 @@ IOBuf::IOBuf(
flagsAndSharedInfo_(flagsAndSharedInfo) {
assert(data >= buf);
assert(data + length <= buf + capacity);
CHECK(!folly::asan_region_is_poisoned(buf, capacity));
}
IOBuf::~IOBuf() {
......
......@@ -244,6 +244,17 @@ TEST(IOBuf, WrapBuffer) {
EXPECT_EQ(size4, iobuf4.length());
EXPECT_EQ(buf4.get(), iobuf4.buffer());
EXPECT_EQ(size4, iobuf4.capacity());
if (folly::kIsSanitizeAddress) {
const uint32_t size5 = 100;
uint8_t buf5[size5];
EXPECT_DEATH(IOBuf::wrapBuffer(buf5, size5 + 1), "asan_region_is_poisoned");
const uint32_t size6 = 100;
std::vector<uint8_t> buf6(size6);
EXPECT_DEATH(
IOBuf::wrapBuffer(buf6.data(), size6 + 1), "asan_region_is_poisoned");
}
}
TEST(IOBuf, CreateCombined) {
......
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