From 3cfe9f602b153f51fae4017c402e11ac37870e2c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 17 Oct 2013 16:47:29 -0700 Subject: [PATCH] common/buffer: invalidate crc on zero, copy_in This does not capture users who - calc a crc - use c_str() to modify the buffer content - (re)calc a crc Signed-off-by: Sage Weil --- src/common/buffer.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 221a9977109d..493070557159 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -121,6 +121,10 @@ static uint32_t simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZE Spinlock::Locker l(crc_lock); crc_map[fromto] = crc; } + void invalidate_crc() { + Spinlock::Locker l(crc_lock); + crc_map.clear(); + } }; class buffer::raw_malloc : public buffer::raw { @@ -451,17 +455,20 @@ static uint32_t simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZE assert(_raw); assert(o <= _len); assert(o+l <= _len); + _raw->invalidate_crc(); memcpy(c_str()+o, src, l); } void buffer::ptr::zero() { + _raw->invalidate_crc(); memset(c_str(), 0, _len); } void buffer::ptr::zero(unsigned o, unsigned l) { assert(o+l <= _len); + _raw->invalidate_crc(); memset(c_str()+o, 0, l); } -- 2.47.3