Title: [280481] trunk/Source/WebKit
Revision
280481
Author
[email protected]
Date
2021-07-30 10:30:58 -0700 (Fri, 30 Jul 2021)

Log Message

Attribute nw connections to the source application
https://bugs.webkit.org/show_bug.cgi?id=228641
<rdar://81039713>

Reviewed by Alex Christensen.

Add source application token for every nw connection/listener, like done for WebSocket or NSURLSession tasks.
This will allow the nw layer to do custom processing based on the application doing the loads.
Introduce an audit_token_t getter on NetworkProcess.

* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::sourceApplicationAuditData const):
(WebKit::NetworkProcess::sourceApplicationAuditToken const):
* NetworkProcess/webrtc/NetworkRTCProvider.cpp:
(WebKit::NetworkRTCProvider::NetworkRTCProvider):
* NetworkProcess/webrtc/NetworkRTCProvider.h:
(WebKit::NetworkRTCProvider::sourceApplicationAuditToken const):
* NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
(WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
* NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
(WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
(WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
* Platform/spi/Cocoa/NWParametersSPI.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (280480 => 280481)


--- trunk/Source/WebKit/ChangeLog	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/ChangeLog	2021-07-30 17:30:58 UTC (rev 280481)
@@ -1,3 +1,29 @@
+2021-07-30  Youenn Fablet  <[email protected]>
+
+        Attribute nw connections to the source application
+        https://bugs.webkit.org/show_bug.cgi?id=228641
+        <rdar://81039713>
+
+        Reviewed by Alex Christensen.
+
+        Add source application token for every nw connection/listener, like done for WebSocket or NSURLSession tasks.
+        This will allow the nw layer to do custom processing based on the application doing the loads.
+        Introduce an audit_token_t getter on NetworkProcess.
+
+        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+        (WebKit::NetworkProcess::sourceApplicationAuditData const):
+        (WebKit::NetworkProcess::sourceApplicationAuditToken const):
+        * NetworkProcess/webrtc/NetworkRTCProvider.cpp:
+        (WebKit::NetworkRTCProvider::NetworkRTCProvider):
+        * NetworkProcess/webrtc/NetworkRTCProvider.h:
+        (WebKit::NetworkRTCProvider::sourceApplicationAuditToken const):
+        * NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm:
+        (WebKit::NetworkRTCTCPSocketCocoa::NetworkRTCTCPSocketCocoa):
+        * NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm:
+        (WebKit::NetworkRTCUDPSocketCocoaConnections::NetworkRTCUDPSocketCocoaConnections):
+        (WebKit::NetworkRTCUDPSocketCocoaConnections::configureParameters):
+        * Platform/spi/Cocoa/NWParametersSPI.h:
+
 2021-07-29  Myles C. Maxfield  <[email protected]>
 
         Stop building WebGPU and the WHLSL compiler to decrease binary size

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (280480 => 280481)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2021-07-30 17:30:58 UTC (rev 280481)
@@ -197,6 +197,7 @@
 
 #if PLATFORM(COCOA)
     RetainPtr<CFDataRef> sourceApplicationAuditData() const;
+    std::optional<audit_token_t> sourceApplicationAuditToken() const;
 #endif
 #if PLATFORM(COCOA) || USE(SOUP)
     HashSet<String> hostNamesWithHSTSCache(PAL::SessionID) const;

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (280480 => 280481)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2021-07-30 17:30:58 UTC (rev 280481)
@@ -109,15 +109,22 @@
 RetainPtr<CFDataRef> NetworkProcess::sourceApplicationAuditData() const
 {
 #if USE(SOURCE_APPLICATION_AUDIT_DATA)
+    if (auto auditToken = sourceApplicationAuditToken())
+        return adoptCF(CFDataCreate(nullptr, (const UInt8*)&*auditToken, sizeof(*auditToken)));
+#endif
+
+    return nullptr;
+}
+
+std::optional<audit_token_t> NetworkProcess::sourceApplicationAuditToken() const
+{
+#if USE(SOURCE_APPLICATION_AUDIT_DATA)
     ASSERT(parentProcessConnection());
     if (!parentProcessConnection())
-        return nullptr;
-    std::optional<audit_token_t> auditToken = parentProcessConnection()->getAuditToken();
-    if (!auditToken)
-        return nullptr;
-    return adoptCF(CFDataCreate(nullptr, (const UInt8*)&*auditToken, sizeof(*auditToken)));
+        return { };
+    return parentProcessConnection()->getAuditToken();
 #else
-    return nullptr;
+    return { };
 #endif
 }
 

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp (280480 => 280481)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.cpp	2021-07-30 17:30:58 UTC (rev 280481)
@@ -86,6 +86,9 @@
     , m_rtcMonitor(*this)
     , m_rtcNetworkThread(rtcNetworkThread())
     , m_packetSocketFactory(makeUniqueRefWithoutFastMallocCheck<rtc::BasicPacketSocketFactory>(&m_rtcNetworkThread))
+#if PLATFORM(COCOA)
+    , m_sourceApplicationAuditToken(connection.networkProcess().sourceApplicationAuditToken())
+#endif
 {
 #if !RELEASE_LOG_DISABLED
     rtc::LogMessage::SetLogOutput(WebKit2LogWebRTC.state == WTFLogChannelState::On ? rtc::LS_INFO : rtc::LS_WARNING, doReleaseLogging);

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h (280480 => 280481)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCProvider.h	2021-07-30 17:30:58 UTC (rev 280481)
@@ -105,6 +105,10 @@
     void closeSocket(WebCore::LibWebRTCSocketIdentifier);
     void doSocketTaskOnRTCNetworkThread(WebCore::LibWebRTCSocketIdentifier, Function<void(Socket&)>&&);
 
+#if PLATFORM(COCOA)
+    const std::optional<audit_token_t>& sourceApplicationAuditToken() const { return m_sourceApplicationAuditToken; }
+#endif
+
 private:
     explicit NetworkRTCProvider(NetworkConnectionToWebProcess&);
     void startListeningForIPC();
@@ -147,6 +151,11 @@
     bool m_isListeningSocketAuthorized { true };
     bool m_platformTCPSocketsEnabled { false };
     bool m_platformUDPSocketsEnabled { false };
+
+#if PLATFORM(COCOA)
+    std::optional<audit_token_t> m_sourceApplicationAuditToken;
+#endif
+
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm (280480 => 280481)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCTCPSocketCocoa.mm	2021-07-30 17:30:58 UTC (rev 280481)
@@ -31,6 +31,7 @@
 #include "DataReference.h"
 #include "LibWebRTCNetworkMessages.h"
 #include "Logging.h"
+#include "NWParametersSPI.h"
 #include <WebCore/STUNMessageParsing.h>
 #include <dispatch/dispatch.h>
 #include <wtf/BlockPtr.h>
@@ -95,6 +96,9 @@
         nw_tcp_options_set_no_delay(tcp_options, true);
     }));
 
+    if (auto token = rtcProvider.sourceApplicationAuditToken())
+        nw_parameters_set_source_application(tcpTLS.get(), *token);
+
     m_nwConnection = adoptNS(nw_connection_create(host.get(), tcpTLS.get()));
 
     nw_connection_set_queue(m_nwConnection.get(), tcpSocketQueue());

Modified: trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm (280480 => 280481)


--- trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/NetworkProcess/webrtc/NetworkRTCUDPSocketCocoa.mm	2021-07-30 17:30:58 UTC (rev 280481)
@@ -74,6 +74,9 @@
     bool m_isKnownTracker { false };
 #endif
     bool m_shouldBypassRelay { false };
+
+    std::optional<audit_token_t> m_sourceApplicationAuditToken;
+
     rtc::SocketAddress m_address;
     RetainPtr<nw_listener_t> m_nwListener;
     Lock m_nwConnectionsLock;
@@ -159,6 +162,7 @@
     , m_isKnownTracker(isKnownTracker(domain))
 #endif
     , m_shouldBypassRelay(isRelayDisabled)
+    , m_sourceApplicationAuditToken(rtcProvider.sourceApplicationAuditToken())
 {
     auto parameters = adoptNS(nw_parameters_create_secure_udp(NW_PARAMETERS_DISABLE_PROTOCOL, NW_PARAMETERS_DEFAULT_CONFIGURATION));
     {
@@ -233,6 +237,9 @@
     nw_parameters_set_is_known_tracker(parameters, m_isKnownTracker);
 #endif
 
+    if (m_sourceApplicationAuditToken)
+        nw_parameters_set_source_application(parameters, *m_sourceApplicationAuditToken);
+
     nw_parameters_set_reuse_local_address(parameters, true);
 }
 

Modified: trunk/Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h (280480 => 280481)


--- trunk/Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h	2021-07-30 17:02:17 UTC (rev 280480)
+++ trunk/Source/WebKit/Platform/spi/Cocoa/NWParametersSPI.h	2021-07-30 17:30:58 UTC (rev 280481)
@@ -34,6 +34,7 @@
 WTF_EXTERN_C_BEGIN
 
 void nw_parameters_set_account_id(nw_parameters_t, const char * account_id);
+void nw_parameters_set_source_application(nw_parameters_t, audit_token_t);
 
 #if HAVE(NWPARAMETERS_TRACKER_API)
 void nw_parameters_set_is_third_party_web_content(nw_parameters_t, bool is_third_party_web_content);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to