[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