summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-23 02:12:02 +0000
committerepenner@chromium.org <epenner@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-23 02:12:02 +0000
commit2462b7f03c2f88b2d5c278be0d755eaac824a635 (patch)
tree19f3d0583f44a99d1f0fcecb6da2fc8709ff1568 /content
parenteecfd9fc99d61d45cb794606a90c9a90d158ada1 (diff)
downloadchromium_src-2462b7f03c2f88b2d5c278be0d755eaac824a635.zip
chromium_src-2462b7f03c2f88b2d5c278be0d755eaac824a635.tar.gz
chromium_src-2462b7f03c2f88b2d5c278be0d755eaac824a635.tar.bz2
CC: Avoid use-after free when accessing sync_message_filter
The SyncMessageFilter is accessed from ChildThread. This keeps a reference instead so we don't risk use-after-free while accessing it. BUG=232981 NOTRY=true No try since win-aura and mac-asan failures are unrelated. Review URL: https://chromiumcodereview.appspot.com/14057023 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195689 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/renderer/gpu/compositor_output_surface.cc5
-rw-r--r--content/renderer/gpu/compositor_output_surface.h2
2 files changed, 5 insertions, 2 deletions
diff --git a/content/renderer/gpu/compositor_output_surface.cc b/content/renderer/gpu/compositor_output_surface.cc
index 10bbd1f..8d24043 100644
--- a/content/renderer/gpu/compositor_output_surface.cc
+++ b/content/renderer/gpu/compositor_output_surface.cc
@@ -16,7 +16,6 @@
#include "content/renderer/render_thread_impl.h"
#include "ipc/ipc_forwarding_message_filter.h"
#include "ipc/ipc_sync_channel.h"
-#include "ipc/ipc_sync_message_filter.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3D.h"
#if defined(OS_ANDROID)
@@ -69,6 +68,8 @@ CompositorOutputSurface::CompositorOutputSurface(
capabilities_.has_parent_compositor = command_line->HasSwitch(
switches::kEnableDelegatedRenderer);
DetachFromThread();
+ message_sender_ = RenderThreadImpl::current()->sync_message_filter();
+ DCHECK(message_sender_);
}
CompositorOutputSurface::~CompositorOutputSurface() {
@@ -163,7 +164,7 @@ void CompositorOutputSurface::OnSwapAck(const cc::CompositorFrameAck& ack) {
}
bool CompositorOutputSurface::Send(IPC::Message* message) {
- return ChildThread::current()->sync_message_filter()->Send(message);
+ return message_sender_->Send(message);
}
namespace {
diff --git a/content/renderer/gpu/compositor_output_surface.h b/content/renderer/gpu/compositor_output_surface.h
index 9faa373..e62990c 100644
--- a/content/renderer/gpu/compositor_output_surface.h
+++ b/content/renderer/gpu/compositor_output_surface.h
@@ -13,6 +13,7 @@
#include "base/threading/platform_thread.h"
#include "base/time.h"
#include "cc/output/output_surface.h"
+#include "ipc/ipc_sync_message_filter.h"
namespace base {
class TaskRunner;
@@ -93,6 +94,7 @@ class CompositorOutputSurface
scoped_refptr<IPC::ForwardingMessageFilter> output_surface_filter_;
scoped_refptr<CompositorOutputSurfaceProxy> output_surface_proxy_;
+ scoped_refptr<IPC::SyncMessageFilter> message_sender_;
int routing_id_;
bool prefers_smoothness_;
base::PlatformThreadId main_thread_id_;