Title: [248628] branches/safari-608-branch/Source
Revision
248628
Author
alanc...@apple.com
Date
2019-08-13 13:08:23 -0700 (Tue, 13 Aug 2019)

Log Message

Cherry-pick r248440. rdar://problem/54237795

    [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
    https://bugs.webkit.org/show_bug.cgi?id=200543
    Source/WebKit:

    Reviewed by Brent Fulgham.

    Adopt SPI to issue a process-specific sandbox extension for local file read, passing it the process
    identifier of the WebContent process.

    * Shared/Cocoa/SandboxExtensionCocoa.mm:
    (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
    (WebKit::SandboxExtension::createHandleForReadByPid):
    * Shared/SandboxExtension.h:
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):

    Source/WTF:

    <rdar://problem/49394015>

    Reviewed by Brent Fulgham.

    Add new SPI.

    * wtf/Platform.h:
    * wtf/spi/darwin/SandboxSPI.h:

    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248440 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Modified Paths

Diff

Modified: branches/safari-608-branch/Source/WTF/ChangeLog (248627 => 248628)


--- branches/safari-608-branch/Source/WTF/ChangeLog	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WTF/ChangeLog	2019-08-13 20:08:23 UTC (rev 248628)
@@ -1,3 +1,50 @@
+2019-08-13  Alan Coon  <alanc...@apple.com>
+
+        Cherry-pick r248440. rdar://problem/54237795
+
+    [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
+    https://bugs.webkit.org/show_bug.cgi?id=200543
+    Source/WebKit:
+    
+    Reviewed by Brent Fulgham.
+    
+    Adopt SPI to issue a process-specific sandbox extension for local file read, passing it the process
+    identifier of the WebContent process.
+    
+    * Shared/Cocoa/SandboxExtensionCocoa.mm:
+    (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
+    (WebKit::SandboxExtension::createHandleForReadByPid):
+    * Shared/SandboxExtension.h:
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
+    
+    Source/WTF:
+    
+    <rdar://problem/49394015>
+    
+    Reviewed by Brent Fulgham.
+    
+    Add new SPI.
+    
+    * wtf/Platform.h:
+    * wtf/spi/darwin/SandboxSPI.h:
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248440 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-08  Per Arne Vollan  <pvol...@apple.com>
+
+            [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
+            https://bugs.webkit.org/show_bug.cgi?id=200543
+            <rdar://problem/49394015>
+
+            Reviewed by Brent Fulgham.
+
+            Add new SPI.
+
+            * wtf/Platform.h:
+            * wtf/spi/darwin/SandboxSPI.h:
+
 2019-08-06  Alan Coon  <alanc...@apple.com>
 
         Apply patch. rdar://problem/53992160

Modified: branches/safari-608-branch/Source/WTF/wtf/Platform.h (248627 => 248628)


--- branches/safari-608-branch/Source/WTF/wtf/Platform.h	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WTF/wtf/Platform.h	2019-08-13 20:08:23 UTC (rev 248628)
@@ -1526,6 +1526,10 @@
 #define HAVE_SANDBOX_ISSUE_MACH_EXTENSION_TO_PROCESS_BY_PID 1
 #endif
 
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 130000)
+#define HAVE_SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_PID 1
+#endif
+
 #if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 130000)
 #define HAVE_MDNS_FAST_REGISTRATION 1
 #endif

Modified: branches/safari-608-branch/Source/WTF/wtf/spi/darwin/SandboxSPI.h (248627 => 248628)


--- branches/safari-608-branch/Source/WTF/wtf/spi/darwin/SandboxSPI.h	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WTF/wtf/spi/darwin/SandboxSPI.h	2019-08-13 20:08:23 UTC (rev 248628)
@@ -64,6 +64,7 @@
 char *sandbox_extension_issue_file(const char *extension_class, const char *path, uint32_t flags);
 char *sandbox_extension_issue_generic(const char *extension_class, uint32_t flags);
 char *sandbox_extension_issue_mach_to_process_by_pid(const char *extension_class, const char *name, uint32_t flags, pid_t);
+char *sandbox_extension_issue_file_to_process_by_pid(const char *extension_class, const char *path, uint32_t flags, pid_t);
 int sandbox_check(pid_t, const char *operation, enum sandbox_filter_type, ...);
 int sandbox_check_by_audit_token(audit_token_t, const char *operation, enum sandbox_filter_type, ...);
 int sandbox_container_path_for_pid(pid_t, char *buffer, size_t bufsize);

Modified: branches/safari-608-branch/Source/WebKit/ChangeLog (248627 => 248628)


--- branches/safari-608-branch/Source/WebKit/ChangeLog	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WebKit/ChangeLog	2019-08-13 20:08:23 UTC (rev 248628)
@@ -1,5 +1,56 @@
 2019-08-13  Alan Coon  <alanc...@apple.com>
 
+        Cherry-pick r248440. rdar://problem/54237795
+
+    [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
+    https://bugs.webkit.org/show_bug.cgi?id=200543
+    Source/WebKit:
+    
+    Reviewed by Brent Fulgham.
+    
+    Adopt SPI to issue a process-specific sandbox extension for local file read, passing it the process
+    identifier of the WebContent process.
+    
+    * Shared/Cocoa/SandboxExtensionCocoa.mm:
+    (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
+    (WebKit::SandboxExtension::createHandleForReadByPid):
+    * Shared/SandboxExtension.h:
+    * UIProcess/WebPageProxy.cpp:
+    (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
+    
+    Source/WTF:
+    
+    <rdar://problem/49394015>
+    
+    Reviewed by Brent Fulgham.
+    
+    Add new SPI.
+    
+    * wtf/Platform.h:
+    * wtf/spi/darwin/SandboxSPI.h:
+    
+    
+    git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248440 268f45cc-cd09-0410-ab3c-d52691b4dbfc
+
+    2019-08-08  Per Arne Vollan  <pvol...@apple.com>
+
+            [Mac] Use the PID of the WebContent process when issuing local file read sandbox extensions
+            https://bugs.webkit.org/show_bug.cgi?id=200543
+
+            Reviewed by Brent Fulgham.
+
+            Adopt SPI to issue a process-specific sandbox extension for local file read, passing it the process
+            identifier of the WebContent process.
+
+            * Shared/Cocoa/SandboxExtensionCocoa.mm:
+            (WebKit::SandboxExtensionImpl::sandboxExtensionForType):
+            (WebKit::SandboxExtension::createHandleForReadByPid):
+            * Shared/SandboxExtension.h:
+            * UIProcess/WebPageProxy.cpp:
+            (WebKit::WebPageProxy::maybeInitializeSandboxExtensionHandle):
+
+2019-08-13  Alan Coon  <alanc...@apple.com>
+
         Cherry-pick r248548. rdar://problem/54237813
 
     Fix Crash in Mail Search

Modified: branches/safari-608-branch/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm (248627 => 248628)


--- branches/safari-608-branch/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WebKit/Shared/Cocoa/SandboxExtensionCocoa.mm	2019-08-13 20:08:23 UTC (rev 248628)
@@ -100,6 +100,14 @@
 #endif
         case SandboxExtension::Type::Generic:
             return sandbox_extension_issue_generic(path, 0);
+        case SandboxExtension::Type::ReadByPid:
+#if HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_PID)
+            return sandbox_extension_issue_file_to_process_by_pid(APP_SANDBOX_READ, path, 0, pid.value());
+#else
+            UNUSED_PARAM(pid);
+            ASSERT_NOT_REACHED();
+            return nullptr;
+#endif
         }
     }
 
@@ -336,6 +344,19 @@
     return true;
 }
 
+bool SandboxExtension::createHandleForReadByPid(const String& path, ProcessID pid, Handle& handle)
+{
+    ASSERT(!handle.m_sandboxExtension);
+    
+    handle.m_sandboxExtension = SandboxExtensionImpl::create(path.utf8().data(), Type::ReadByPid, pid);
+    if (!handle.m_sandboxExtension) {
+        WTFLogAlways("Could not create a '%s' sandbox extension", path.utf8().data());
+        return false;
+    }
+    
+    return true;
+}
+
 SandboxExtension::SandboxExtension(const Handle& handle)
     : m_sandboxExtension(WTFMove(handle.m_sandboxExtension))
 {

Modified: branches/safari-608-branch/Source/WebKit/Shared/SandboxExtension.h (248627 => 248628)


--- branches/safari-608-branch/Source/WebKit/Shared/SandboxExtension.h	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WebKit/Shared/SandboxExtension.h	2019-08-13 20:08:23 UTC (rev 248628)
@@ -49,6 +49,7 @@
         ReadWrite,
         Mach,
         Generic,
+        ReadByPid
     };
 
     class Handle {
@@ -104,6 +105,7 @@
     static String createHandleForTemporaryFile(const String& prefix, Type, Handle&);
     static bool createHandleForGenericExtension(const String& extensionClass, Handle&);
     static bool createHandleForMachLookupByPid(const String& service, ProcessID, Handle&);
+    static bool createHandleForReadByPid(const String& path, ProcessID, Handle&);
     ~SandboxExtension();
 
     bool consume();

Modified: branches/safari-608-branch/Source/WebKit/UIProcess/WebPageProxy.cpp (248627 => 248628)


--- branches/safari-608-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-08-13 20:01:36 UTC (rev 248627)
+++ branches/safari-608-branch/Source/WebKit/UIProcess/WebPageProxy.cpp	2019-08-13 20:08:23 UTC (rev 248628)
@@ -1065,7 +1065,11 @@
     // Inspector resources are in a directory with assumed access.
     ASSERT_WITH_SECURITY_IMPLICATION(!WebKit::isInspectorPage(*this));
 
+#if PLATFORM(MAC) && HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_PID)
+    if (SandboxExtension::createHandleForReadByPid("/", processIdentifier(), sandboxExtensionHandle)) {
+#else
     if (SandboxExtension::createHandle("/", SandboxExtension::Type::ReadOnly, sandboxExtensionHandle)) {
+#endif
         willAcquireUniversalFileReadSandboxExtension(process);
         return;
     }
@@ -1078,7 +1082,13 @@
     // We failed to issue an universal file read access sandbox, fall back to issuing one for the base URL instead.
     auto baseURL = URL(URL(), url.baseAsString());
     auto basePath = baseURL.fileSystemPath();
-    if (!basePath.isNull() && SandboxExtension::createHandle(basePath, SandboxExtension::Type::ReadOnly, sandboxExtensionHandle))
+    if (basePath.isNull())
+        return;
+#if PLATFORM(MAC) && HAVE(SANDBOX_ISSUE_READ_EXTENSION_TO_PROCESS_BY_PID)
+    if (SandboxExtension::createHandleForReadByPid(basePath, processIdentifier(), sandboxExtensionHandle))
+#else
+    if (SandboxExtension::createHandle(basePath, SandboxExtension::Type::ReadOnly, sandboxExtensionHandle))
+#endif
         m_process->assumeReadAccessToBaseURL(*this, baseURL);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to