diff --git a/util/posix/scoped_mmap.cc b/util/posix/scoped_mmap.cc index f8449b1f..4860cecb 100644 --- a/util/posix/scoped_mmap.cc +++ b/util/posix/scoped_mmap.cc @@ -19,6 +19,7 @@ #include #include "base/logging.h" +#include "base/numerics/safe_math.h" namespace { @@ -56,6 +57,7 @@ bool ScopedMmap::ResetAddrLen(void* addr, size_t len) { DCHECK_NE(len, 0u); DCHECK_EQ(new_addr % getpagesize(), 0u); DCHECK_EQ(len % getpagesize(), 0u); + DCHECK((base::CheckedNumeric(new_addr) + (len - 1)).IsValid()); } bool result = true; diff --git a/util/posix/scoped_mmap_test.cc b/util/posix/scoped_mmap_test.cc index ea96c65f..0c4787b2 100644 --- a/util/posix/scoped_mmap_test.cc +++ b/util/posix/scoped_mmap_test.cc @@ -302,11 +302,15 @@ TEST(ScopedMmapDeathTest, Mprotect) { EXPECT_EQ(kPageSize, mapping.len()); char* addr = mapping.addr_as(); - *addr = 0; + *addr = 1; ASSERT_TRUE(mapping.Mprotect(PROT_READ)); EXPECT_DEATH(*addr = 0, ""); + + ASSERT_TRUE(mapping.Mprotect(PROT_READ | PROT_WRITE)); + EXPECT_EQ(1, *addr); + *addr = 2; } } // namespace