From: Sage Weil Date: Thu, 17 Oct 2013 23:47:29 +0000 (-0700) Subject: common/buffer: invalidate crc on zero, copy_in X-Git-Tag: v0.72-rc1~33^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F738%2Fhead;p=ceph.git 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 --- 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); }