Comment #21 on issue 127931 by
bruen...@chromium.org: Chrome: Crash Report
I'm seeing a use-after-free reported by Memcheck on the ChromeOS Valgrind
bots running the ipc test. It shows up non-deterministically, maybe every
7 runs or so. The use-after-free is reported on setting _running to false
which was just added in r138143, but also on the call to CleanUp(). I'm
guessing this is part of this issue.
I will add a suppression to keep the bots green.
as sheriff I saw it here:
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10537/steps/memory%20test%3A%20ipc/logs/stdio
later here also:
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10579/steps/memory%20test%3A%20ipc/logs/stdio
I see it on earlier runs too and it's hard to pinpoint where it started
making it hard to find the offending commit:
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10477
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10464
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10461
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10452
http://build.chromium.org/p/chromium.memory.fyi/builders/Chromium%20OS%20%28valgrind%29%282%29/builds/10348
it shows up like this:
13:59:33 memcheck_analyze.py [ERROR] FAIL! There were 2 errors:
13:59:33 memcheck_analyze.py [ERROR] Command:
InvalidWrite
Invalid write of size 1
base::Thread::ThreadMain() (base/threading/thread.cc:170)
base::(anonymous namespace)::ThreadFunc(void*)
(base/threading/platform_thread_posix.cc:65)
Address 0x73c5d92 is 162 bytes inside a block of size 208 free'd
operator delete(void*) (m_replacemalloc/vg_replace_malloc.c:1083)
IPC::(anonymous
namespace)::TestSyncMessageFilter::~TestSyncMessageFilter()
(ipc/ipc_sync_channel_unittest.cc:1114)
IPC::ChannelProxy::MessageFilter::OnDestruct() const
(ipc/ipc_channel_proxy.cc:37)
IPC::ChannelProxy::MessageFilterTraits::Destruct(IPC::ChannelProxy::MessageFilter
const*) (./ipc/ipc_channel_proxy.h:103)
base::RefCountedThreadSafe<IPC::ChannelProxy::MessageFilter,
IPC::ChannelProxy::MessageFilterTraits>::Release() const
(./base/memory/ref_counted.h:145)
base::internal::MaybeRefcount<true, IPC::(anonymous
namespace)::TestSyncMessageFilter*>::Release(IPC::(anonymous
namespace)::TestSyncMessageFilter*) (./base/bind_helpers.h:466)
base::internal::BindState<base::internal::RunnableAdapter<void
(IPC::(anonymous namespace)::TestSyncMessageFilter::*)()>, void
()(IPC::(anonymous namespace)::TestSyncMessageFilter*), void
()(IPC::(anonymous namespace)::TestSyncMessageFilter*)>::~BindState()
(./base/bind_internal.h:2566)
base::RefCountedThreadSafe<base::internal::BindStateBase,
base::DefaultRefCountedThreadSafeTraits<base::internal::BindStateBase>
>::DeleteInternal(base::internal::BindStateBase const*)
(./base/memory/ref_counted.h:151)
base::DefaultRefCountedThreadSafeTraits<base::internal::BindStateBase>::Destruct(base::internal::BindStateBase
const*) (./base/memory/ref_counted.h:116)
base::RefCountedThreadSafe<base::internal::BindStateBase,
base::DefaultRefCountedThreadSafeTraits<base::internal::BindStateBase>
>::Release() const (./base/memory/ref_counted.h:145)
scoped_refptr<base::internal::BindStateBase>::~scoped_refptr()
(./base/memory/ref_counted.h:243)
base::internal::CallbackBase::~CallbackBase()
(base/callback_internal.cc:33)
base::Callback<void ()()>::~Callback() (./base/callback_forward.h:12)
base::PendingTask::~PendingTask() (base/pending_task.cc:32)
MessageLoop::DoWork() (base/message_loop.cc:654)
base::MessagePumpDefault::Run(base::MessagePump::Delegate*)
(base/message_pump_default.cc:28)
MessageLoop::RunInternal() (base/message_loop.cc:422)
MessageLoop::RunHandler() (base/message_loop.cc:395)
Suppression (error hash=#E6B7B8017752BDB2#):
For more info on using suppressions see
http://dev.chromium.org/developers/tree-sheriffs/sheriff-details-chromium/memory-sheriff#TOC-Suppressing-memory-reports
{
<insert_a_suppression_name_here>
Memcheck:Unaddressable
fun:_ZN4base6Thread10ThreadMainEv
fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv
}
13:59:33 memcheck_analyze.py [ERROR] Command:
InvalidRead
Invalid read of size 8
base::Thread::ThreadMain() (base/threading/thread.cc:173)
base::(anonymous namespace)::ThreadFunc(void*)
(base/threading/platform_thread_posix.cc:65)
Address 0x73c5d88 is 152 bytes inside a block of size 208 free'd
operator delete(void*) (m_replacemalloc/vg_replace_malloc.c:1083)
IPC::(anonymous
namespace)::TestSyncMessageFilter::~TestSyncMessageFilter()
(ipc/ipc_sync_channel_unittest.cc:1114)
IPC::ChannelProxy::MessageFilter::OnDestruct() const
(ipc/ipc_channel_proxy.cc:37)
IPC::ChannelProxy::MessageFilterTraits::Destruct(IPC::ChannelProxy::MessageFilter
const*) (./ipc/ipc_channel_proxy.h:103)
base::RefCountedThreadSafe<IPC::ChannelProxy::MessageFilter,
IPC::ChannelProxy::MessageFilterTraits>::Release() const
(./base/memory/ref_counted.h:145)
base::internal::MaybeRefcount<true, IPC::(anonymous
namespace)::TestSyncMessageFilter*>::Release(IPC::(anonymous
namespace)::TestSyncMessageFilter*) (./base/bind_helpers.h:466)
base::internal::BindState<base::internal::RunnableAdapter<void
(IPC::(anonymous namespace)::TestSyncMessageFilter::*)()>, void
()(IPC::(anonymous namespace)::TestSyncMessageFilter*), void
()(IPC::(anonymous namespace)::TestSyncMessageFilter*)>::~BindState()
(./base/bind_internal.h:2566)
base::RefCountedThreadSafe<base::internal::BindStateBase,
base::DefaultRefCountedThreadSafeTraits<base::internal::BindStateBase>
>::DeleteInternal(base::internal::BindStateBase const*)
(./base/memory/ref_counted.h:151)
base::DefaultRefCountedThreadSafeTraits<base::internal::BindStateBase>::Destruct(base::internal::BindStateBase
const*) (./base/memory/ref_counted.h:116)
base::RefCountedThreadSafe<base::internal::BindStateBase,
base::DefaultRefCountedThreadSafeTraits<base::internal::BindStateBase>
>::Release() const (./base/memory/ref_counted.h:145)
scoped_refptr<base::internal::BindStateBase>::~scoped_refptr()
(./base/memory/ref_counted.h:243)
base::internal::CallbackBase::~CallbackBase()
(base/callback_internal.cc:33)
base::Callback<void ()()>::~Callback() (./base/callback_forward.h:12)
base::PendingTask::~PendingTask() (base/pending_task.cc:32)
MessageLoop::DoWork() (base/message_loop.cc:654)
base::MessagePumpDefault::Run(base::MessagePump::Delegate*)
(base/message_pump_default.cc:28)
MessageLoop::RunInternal() (base/message_loop.cc:422)
MessageLoop::RunHandler() (base/message_loop.cc:395)
Suppression (error hash=#7BF29E2A784AE44E#):
For more info on using suppressions see
http://dev.chromium.org/developers/tree-sheriffs/sheriff-details-chromium/memory-sheriff#TOC-Suppressing-memory-reports
{
<insert_a_suppression_name_here>
Memcheck:Unaddressable
fun:_ZN4base6Thread10ThreadMainEv
fun:_ZN4base12_GLOBAL__N_110ThreadFuncEPv
}