Make it possible to add regression tests for blocked XPC services
authorpvollan@apple.com <pvollan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 Dec 2019 23:39:13 +0000 (23:39 +0000)
committerpvollan@apple.com <pvollan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 10 Dec 2019 23:39:13 +0000 (23:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=204967

Reviewed by Brent Fulgham.

On macOS and iOS, it should be possible to add regression tests for blocked mach services. Add a method
to Internals, which checks whether a given process has access to mach lookup for a given global service
name. Currently, the only supported process is the WebContent process since the PIDs of other processes
are not readily available in Internals, but support for other processes will be added when needed.

No new tests, since this patch is in preparation for adding regression tests for sandbox changes.

* testing/Internals.cpp:
(WebCore::Internals::hasSandboxMachLookupAccessToGlobalName):
* testing/Internals.h:
* testing/Internals.idl:

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

Source/WebCore/ChangeLog
Source/WebCore/testing/Internals.cpp
Source/WebCore/testing/Internals.h
Source/WebCore/testing/Internals.idl

index 2a93db0..6190536 100644 (file)
@@ -1,3 +1,22 @@
+2019-12-10  Per Arne Vollan  <pvollan@apple.com>
+
+        Make it possible to add regression tests for blocked XPC services
+        https://bugs.webkit.org/show_bug.cgi?id=204967
+
+        Reviewed by Brent Fulgham.
+
+        On macOS and iOS, it should be possible to add regression tests for blocked mach services. Add a method
+        to Internals, which checks whether a given process has access to mach lookup for a given global service
+        name. Currently, the only supported process is the WebContent process since the PIDs of other processes
+        are not readily available in Internals, but support for other processes will be added when needed.
+
+        No new tests, since this patch is in preparation for adding regression tests for sandbox changes.
+
+        * testing/Internals.cpp:
+        (WebCore::Internals::hasSandboxMachLookupAccessToGlobalName):
+        * testing/Internals.h:
+        * testing/Internals.idl:
+
 2019-12-10  Sihui Liu  <sihui_liu@apple.com>
 
         IndexedDB: remove timer for completed operation in IDBTransaction
index 6f50809..e077796 100644 (file)
 #include "GraphicsContext3DManager.h"
 #endif
 
+#if PLATFORM(COCOA)
+#import <wtf/spi/darwin/SandboxSPI.h>
+#endif
+
 using JSC::CallData;
 using JSC::CallType;
 using JSC::CodeBlock;
@@ -5342,4 +5346,19 @@ Ref<InternalsSetLike> Internals::createInternalsSetLike()
     return InternalsSetLike::create();
 }
 
+bool Internals::hasSandboxMachLookupAccessToGlobalName(const String& process, const String& service)
+{
+#if PLATFORM(COCOA)
+    pid_t pid;
+    if (process == "com.apple.WebKit.WebContent")
+        pid = getpid();
+    else
+        RELEASE_ASSERT_NOT_REACHED();
+
+    return !sandbox_check(pid, "mach-lookup", static_cast<enum sandbox_filter_type>(SANDBOX_FILTER_GLOBAL_NAME | SANDBOX_CHECK_NO_REPORT), service.utf8().data());
+#else
+    return false;
+#endif
+}
+
 } // namespace WebCore
index 6583c3a..3577437 100644 (file)
@@ -912,6 +912,8 @@ public:
 
     Ref<InternalsSetLike> createInternalsSetLike();
     Ref<InternalsMapLike> createInternalsMapLike();
+        
+    bool hasSandboxMachLookupAccessToGlobalName(const String& process, const String& service);
 
     String highlightPseudoElementColor(const String& highlightName, Element&);
 
index 332e5a6..bde8f99 100644 (file)
@@ -823,4 +823,6 @@ enum CompositingPolicy {
     InternalsSetLike createInternalsSetLike();
 
     DOMString highlightPseudoElementColor(DOMString highlightName, Element element);
+
+    boolean hasSandboxMachLookupAccessToGlobalName(DOMString process, DOMString service);
 };