File 0001-Fix-use-after-free-on-Linux-at-shutdown.patch of Package libqt5-qtwebengine
From a626223077ffe7ed4efe8ee15b4dbd16addbce61 Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Date: Thu, 18 Feb 2016 13:11:47 +0100
Subject: Fix use-after-free on Linux at shutdown
The address tracker has a file-description watcher that references
a libevent event that is deleted when the message-loop is deleted.
Fixed by deleting the address-tracker before message-loop.
Change-Id: I18e98e405138be95b86f6418ac639c297a39a9d0
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
---
chromium/net/base/network_change_notifier_linux.cc | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc b/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc
index e1e7de0..44af93c 100644
--- a/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc
+++ b/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc
@@ -21,11 +21,11 @@ class NetworkChangeNotifierLinux::Thread : public base::Thread {
// Plumbing for NetworkChangeNotifier::GetCurrentConnectionType.
// Safe to call from any thread.
NetworkChangeNotifier::ConnectionType GetCurrentConnectionType() {
- return address_tracker_.GetCurrentConnectionType();
+ return address_tracker_->GetCurrentConnectionType();
}
const internal::AddressTrackerLinux* address_tracker() const {
- return &address_tracker_;
+ return address_tracker_.get();
}
protected:
@@ -38,7 +38,7 @@ class NetworkChangeNotifierLinux::Thread : public base::Thread {
void OnLinkChanged();
scoped_ptr<DnsConfigService> dns_config_service_;
// Used to detect online/offline state and IP address changes.
- internal::AddressTrackerLinux address_tracker_;
+ scoped_ptr<internal::AddressTrackerLinux> address_tracker_;
NetworkChangeNotifier::ConnectionType last_type_;
DISALLOW_COPY_AND_ASSIGN(Thread);
@@ -47,13 +47,13 @@ class NetworkChangeNotifierLinux::Thread : public base::Thread {
NetworkChangeNotifierLinux::Thread::Thread(
const base::hash_set<std::string>& ignored_interfaces)
: base::Thread("NetworkChangeNotifier"),
- address_tracker_(
+ address_tracker_(new internal::AddressTrackerLinux(
base::Bind(&NetworkChangeNotifierLinux::Thread::OnIPAddressChanged,
base::Unretained(this)),
base::Bind(&NetworkChangeNotifierLinux::Thread::OnLinkChanged,
base::Unretained(this)),
base::Bind(base::DoNothing),
- ignored_interfaces),
+ ignored_interfaces)),
last_type_(NetworkChangeNotifier::CONNECTION_NONE) {
}
@@ -62,13 +62,14 @@ NetworkChangeNotifierLinux::Thread::~Thread() {
}
void NetworkChangeNotifierLinux::Thread::Init() {
- address_tracker_.Init();
+ address_tracker_->Init();
dns_config_service_ = DnsConfigService::CreateSystemService();
dns_config_service_->WatchConfig(
base::Bind(&NetworkChangeNotifier::SetDnsConfig));
}
void NetworkChangeNotifierLinux::Thread::CleanUp() {
+ address_tracker_.reset();
dns_config_service_.reset();
}
--
cgit v1.0-4-g1e03