[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e
andersca at apple.com
andersca at apple.com
Fri Jan 21 14:56:37 UTC 2011
The following commit has been merged in the debian/experimental branch:
commit b294e77e9345697bbffec813ee8648865c1a839b
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Jan 5 03:10:45 2011 +0000
<rdar://problem/8821203> Sandbox violations trying to access the Safari cache
Reviewed by Dan Bernstein.
* Shared/SandboxExtension.h:
(WebKit::SandboxExtension::consumePermanently):
New function which consumes a sandbox extension and destroys it, making it impossible
to later revoke it.
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode):
(WebKit::WebProcessCreationParameters::decode):
Encode and decode the path extension handle.
* Shared/mac/SandboxExtensionMac.mm:
(WebKit::SandboxExtension::createHandle):
Standardize the path before creating the handle.
* UIProcess/mac/WebContextMac.mm:
(WebKit::WebContext::platformInitializeWebProcess):
Create a sandbox extension for the cache path.
* WebProcess/mac/WebProcessMac.mm:
(WebKit::WebProcess::platformInitializeWebProcess):
Consume the sandbox extension.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75042 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 87a08cd..ffc00c0 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,5 +1,33 @@
2011-01-04 Anders Carlsson <andersca at apple.com>
+ Reviewed by Dan Bernstein.
+
+ <rdar://problem/8821203> Sandbox violations trying to access the Safari cache
+
+ * Shared/SandboxExtension.h:
+ (WebKit::SandboxExtension::consumePermanently):
+ New function which consumes a sandbox extension and destroys it, making it impossible
+ to later revoke it.
+
+ * Shared/WebProcessCreationParameters.cpp:
+ (WebKit::WebProcessCreationParameters::encode):
+ (WebKit::WebProcessCreationParameters::decode):
+ Encode and decode the path extension handle.
+
+ * Shared/mac/SandboxExtensionMac.mm:
+ (WebKit::SandboxExtension::createHandle):
+ Standardize the path before creating the handle.
+
+ * UIProcess/mac/WebContextMac.mm:
+ (WebKit::WebContext::platformInitializeWebProcess):
+ Create a sandbox extension for the cache path.
+
+ * WebProcess/mac/WebProcessMac.mm:
+ (WebKit::WebProcess::platformInitializeWebProcess):
+ Consume the sandbox extension.
+
+2011-01-04 Anders Carlsson <andersca at apple.com>
+
Fix build.
* UIProcess/mac/TextCheckerMac.mm:
diff --git a/WebKit2/Shared/SandboxExtension.h b/WebKit2/Shared/SandboxExtension.h
index f5fb576..b712023 100644
--- a/WebKit2/Shared/SandboxExtension.h
+++ b/WebKit2/Shared/SandboxExtension.h
@@ -73,6 +73,7 @@ public:
bool invalidate();
bool consume();
+ bool consumePermanently();
private:
explicit SandboxExtension(const Handle&);
@@ -92,6 +93,7 @@ inline void SandboxExtension::createHandle(const String& path, Type type, Handle
inline SandboxExtension::~SandboxExtension() { }
inline bool SandboxExtension::invalidate() { return true; }
inline bool SandboxExtension::consume() { return true; }
+inline void SandboxExtension::consumePermanently() { return true; }
#endif
} // namespace WebKit
diff --git a/WebKit2/Shared/WebProcessCreationParameters.cpp b/WebKit2/Shared/WebProcessCreationParameters.cpp
index d583e15..847450f 100644
--- a/WebKit2/Shared/WebProcessCreationParameters.cpp
+++ b/WebKit2/Shared/WebProcessCreationParameters.cpp
@@ -58,6 +58,7 @@ void WebProcessCreationParameters::encode(CoreIPC::ArgumentEncoder* encoder) con
#if PLATFORM(MAC)
encoder->encode(presenterApplicationPid);
encoder->encode(nsURLCachePath);
+ encoder->encode(nsURLCachePathExtensionHandle);
encoder->encode(nsURLCacheMemoryCapacity);
encoder->encode(nsURLCacheDiskCapacity);
encoder->encode(acceleratedCompositingPort);
@@ -98,6 +99,8 @@ bool WebProcessCreationParameters::decode(CoreIPC::ArgumentDecoder* decoder, Web
return false;
if (!decoder->decode(parameters.nsURLCachePath))
return false;
+ if (!decoder->decode(parameters.nsURLCachePathExtensionHandle))
+ return false;
if (!decoder->decode(parameters.nsURLCacheMemoryCapacity))
return false;
if (!decoder->decode(parameters.nsURLCacheDiskCapacity))
diff --git a/WebKit2/Shared/WebProcessCreationParameters.h b/WebKit2/Shared/WebProcessCreationParameters.h
index 754aaa6..3d004b2 100644
--- a/WebKit2/Shared/WebProcessCreationParameters.h
+++ b/WebKit2/Shared/WebProcessCreationParameters.h
@@ -75,6 +75,8 @@ struct WebProcessCreationParameters {
#if PLATFORM(MAC)
pid_t presenterApplicationPid;
String nsURLCachePath;
+ SandboxExtension::Handle nsURLCachePathExtensionHandle;
+
uint64_t nsURLCacheMemoryCapacity;
uint64_t nsURLCacheDiskCapacity;
CoreIPC::MachPort acceleratedCompositingPort;
diff --git a/WebKit2/Shared/mac/SandboxExtensionMac.mm b/WebKit2/Shared/mac/SandboxExtensionMac.mm
index d17360b..91ac733 100644
--- a/WebKit2/Shared/mac/SandboxExtensionMac.mm
+++ b/WebKit2/Shared/mac/SandboxExtensionMac.mm
@@ -110,7 +110,9 @@ static WKSandboxExtensionType wkSandboxExtensionType(SandboxExtension::Type type
void SandboxExtension::createHandle(const String& path, Type type, Handle& handle)
{
ASSERT(!handle.m_sandboxExtension);
- handle.m_sandboxExtension = WKSandboxExtensionCreate(fileSystemRepresentation(path).data(), wkSandboxExtensionType(type));
+
+ NSString *standardizedPath = [(NSString *)path stringByStandardizingPath];
+ handle.m_sandboxExtension = WKSandboxExtensionCreate([standardizedPath fileSystemRepresentation], wkSandboxExtensionType(type));
}
SandboxExtension::SandboxExtension(const Handle& handle)
@@ -146,6 +148,19 @@ bool SandboxExtension::consume()
return WKSandboxExtensionConsume(m_sandboxExtension);
}
+bool SandboxExtension::consumePermanently()
+{
+ ASSERT(m_sandboxExtension);
+
+ bool result = WKSandboxExtensionConsume(m_sandboxExtension);
+
+ // Destroy the extension without invalidating it.
+ WKSandboxExtensionDestroy(m_sandboxExtension);
+ m_sandboxExtension = 0;
+
+ return result;
+}
+
} // namespace WebKit
#endif // ENABLE(WEB_PROCESS_SANDBOX)
diff --git a/WebKit2/UIProcess/mac/WebContextMac.mm b/WebKit2/UIProcess/mac/WebContextMac.mm
index d44a62b..8a61aa7 100644
--- a/WebKit2/UIProcess/mac/WebContextMac.mm
+++ b/WebKit2/UIProcess/mac/WebContextMac.mm
@@ -74,6 +74,8 @@ void WebContext::platformInitializeWebProcess(WebProcessCreationParameters& para
NSURLCache *urlCache = [NSURLCache sharedURLCache];
parameters.nsURLCachePath = cachePath.get();
+ SandboxExtension::createHandle(cachePath.get(), SandboxExtension::ReadWrite, parameters.nsURLCachePathExtensionHandle);
+
parameters.nsURLCacheMemoryCapacity = [urlCache memoryCapacity];
parameters.nsURLCacheDiskCapacity = [urlCache diskCapacity];
diff --git a/WebKit2/WebProcess/mac/WebProcessMac.mm b/WebKit2/WebProcess/mac/WebProcessMac.mm
index ff0e75e..a049a39 100644
--- a/WebKit2/WebProcess/mac/WebProcessMac.mm
+++ b/WebKit2/WebProcess/mac/WebProcessMac.mm
@@ -25,6 +25,7 @@
#include "WebProcess.h"
+#include "SandboxExtension.h"
#include "WebProcessCreationParameters.h"
#include <WebCore/MemoryCache.h>
#include <WebCore/PageCache.h>
@@ -111,6 +112,9 @@ void WebProcess::platformInitializeWebProcess(const WebProcessCreationParameters
CString utf8CachePath = parameters.nsURLCachePath.utf8();
NSString *nsCachePath = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:utf8CachePath.data() length:utf8CachePath.length()];
+ RefPtr<SandboxExtension> parentProcessURLCacheSandboxExtension = SandboxExtension::create(parameters.nsURLCachePathExtensionHandle);
+ parentProcessURLCacheSandboxExtension->consumePermanently();
+
RetainPtr<NSURLCache> parentProcessURLCache(AdoptNS, [[NSURLCache alloc] initWithMemoryCapacity:cacheMemoryCapacity diskCapacity:cacheDiskCapacity diskPath:nsCachePath]);
[NSURLCache setSharedURLCache:parentProcessURLCache.get()];
}
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list