⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286037 in webkit


Ignore:
Timestamp:
Nov 18, 2021, 3:54:17 PM (5 years ago)
Author:
pvollan@apple.com
Message:

[macOS][GPUP] Remove access in sandbox to com.apple.audio.AudioComponentRegistrar
https://bugs.webkit.org/show_bug.cgi?id=231694
<rdar://75225923>

Reviewed by Brent Fulgham.

After https://trac.webkit.org/changeset/274435/webkit, there is no need to allow access to this service. This patch also implements sending
the Audio component registrations to the GPU process, which is a requirement before blocking the service in the GPU process.

  • GPUProcess/GPUProcess.h:
  • GPUProcess/GPUProcess.messages.in:
  • GPUProcess/cocoa/GPUProcessCocoa.mm:

(WebKit::GPUProcess::consumeAudioComponentRegistrations):

  • GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
  • Shared/Cocoa/AudioComponentRegistration.cpp: Added.

(WebKit::consumeAudioComponentRegistrations):

  • Shared/Cocoa/AudioComponentRegistration.h: Added.

(WebKit::sendAudioComponentRegistrations):

  • UIProcess/Cocoa/WebProcessProxyCocoa.mm:

(WebKit::WebProcessProxy::sendAudioComponentRegistrations): Deleted.

  • UIProcess/GPU/GPUProcessProxy.cpp:

(WebKit::GPUProcessProxy::didFinishLaunching):

  • UIProcess/WebProcessPool.cpp:

(WebKit::WebProcessPool::initializeNewWebProcess):

  • UIProcess/WebProcessProxy.h:

(WebKit::WebProcessProxy::revokeAudioCaptureExtension):

  • WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/cocoa/WebProcessCocoa.mm:

(WebKit::WebProcess::consumeAudioComponentRegistrations):

Location:
trunk/Source/WebKit
Files:
2 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r286032 r286037  
     12021-11-18  Per Arne Vollan <pvollan@apple.com>
     2
     3        [macOS][GPUP] Remove access in sandbox to com.apple.audio.AudioComponentRegistrar
     4        https://bugs.webkit.org/show_bug.cgi?id=231694
     5        <rdar://75225923>
     6
     7        Reviewed by Brent Fulgham.
     8
     9        After https://trac.webkit.org/changeset/274435/webkit, there is no need to allow access to this service. This patch also implements sending
     10        the Audio component registrations to the GPU process, which is a requirement before blocking the service in the GPU process.
     11
     12        * GPUProcess/GPUProcess.h:
     13        * GPUProcess/GPUProcess.messages.in:
     14        * GPUProcess/cocoa/GPUProcessCocoa.mm:
     15        (WebKit::GPUProcess::consumeAudioComponentRegistrations):
     16        * GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in:
     17        * Shared/Cocoa/AudioComponentRegistration.cpp: Added.
     18        (WebKit::consumeAudioComponentRegistrations):
     19        * Shared/Cocoa/AudioComponentRegistration.h: Added.
     20        (WebKit::sendAudioComponentRegistrations):
     21        * UIProcess/Cocoa/WebProcessProxyCocoa.mm:
     22        (WebKit::WebProcessProxy::sendAudioComponentRegistrations): Deleted.
     23        * UIProcess/GPU/GPUProcessProxy.cpp:
     24        (WebKit::GPUProcessProxy::didFinishLaunching):
     25        * UIProcess/WebProcessPool.cpp:
     26        (WebKit::WebProcessPool::initializeNewWebProcess):
     27        * UIProcess/WebProcessProxy.h:
     28        (WebKit::WebProcessProxy::revokeAudioCaptureExtension):
     29        * WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in:
     30        * WebKit.xcodeproj/project.pbxproj:
     31        * WebProcess/cocoa/WebProcessCocoa.mm:
     32        (WebKit::WebProcess::consumeAudioComponentRegistrations):
     33
    1342021-11-18  Per Arne Vollan  <pvollan@apple.com>
    235
  • trunk/Source/WebKit/GPUProcess/GPUProcess.h

    r285479 r286037  
    2929
    3030#include "AuxiliaryProcess.h"
     31#include "DataReference.h"
    3132#include "SandboxExtension.h"
    3233#include "WebPageProxyIdentifier.h"
     
    109110
    110111    const String& applicationVisibleName() const { return m_applicationVisibleName; }
     112
     113#if PLATFORM(COCOA)
     114    void consumeAudioComponentRegistrations(const IPC::DataReference&);
     115#endif
    111116
    112117    void webProcessConnectionCountForTesting(CompletionHandler<void(uint64_t)>&&);
  • trunk/Source/WebKit/GPUProcess/GPUProcess.messages.in

    r285479 r286037  
    7777#endif
    7878
     79#if PLATFORM(COCOA)
     80    ConsumeAudioComponentRegistrations(IPC::SharedBufferDataReference registrationData)
     81#endif
     82
    7983    WebProcessConnectionCountForTesting() -> (uint64_t count) Async
    8084}
  • trunk/Source/WebKit/GPUProcess/cocoa/GPUProcessCocoa.mm

    r285479 r286037  
    3131#if ENABLE(GPU_PROCESS) && PLATFORM(COCOA)
    3232
     33#import "AudioComponentRegistration.h"
    3334#import "GPUConnectionToWebProcess.h"
    3435#import "RemoteRenderingBackend.h"
     
    7677#endif // ENABLE(CFPREFS_DIRECT_MODE)
    7778
     79void GPUProcess::consumeAudioComponentRegistrations(const IPC::DataReference& data)
     80{
     81    WebKit::consumeAudioComponentRegistrations(data);
     82}
     83
    7884} // namespace WebKit
    7985
  • trunk/Source/WebKit/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in

    r286031 r286037  
    629629    (ipc-posix-name-prefix "AudioIO"))
    630630
     631#if __MAC_OS_X_VERSION_MIN_REQUIRED < 120000
    631632(allow mach-lookup
    632633    (global-name "com.apple.audio.AudioComponentRegistrar"))
     634#endif
    633635
    634636#if !ENABLE(CFPREFS_DIRECT_MODE)
  • trunk/Source/WebKit/UIProcess/Cocoa/WebProcessProxyCocoa.mm

    r285479 r286037  
    4040#import "WebProcessPool.h"
    4141#import <WebCore/RuntimeApplicationChecks.h>
    42 #import <WebCore/WebMAudioUtilitiesCocoa.h>
    4342#import <sys/sysctl.h>
    4443#import <wtf/NeverDestroyed.h>
     
    6564#endif
    6665
    67 #import <pal/cf/AudioToolboxSoftLink.h>
    68 
    6966namespace WebKit {
    7067
     
    290287#endif
    291288
    292 void WebProcessProxy::sendAudioComponentRegistrations()
    293 {
    294     using namespace PAL;
    295 
    296     if (!PAL::isAudioToolboxCoreFrameworkAvailable() || !PAL::canLoad_AudioToolboxCore_AudioComponentFetchServerRegistrations())
    297         return;
    298 
    299     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [weakThis = WeakPtr { *this }] () mutable {
    300         CFDataRef registrations { nullptr };
    301 
    302         WebCore::registerOpusDecoderIfNeeded();
    303         WebCore::registerVorbisDecoderIfNeeded();
    304         if (noErr != AudioComponentFetchServerRegistrations(&registrations) || !registrations)
    305             return;
    306 
    307         RunLoop::main().dispatch([weakThis = WTFMove(weakThis), registrations = adoptCF(registrations)] () mutable {
    308             if (!weakThis)
    309                 return;
    310 
    311             auto registrationData = WebCore::SharedBuffer::create(registrations.get());
    312             weakThis->send(Messages::WebProcess::ConsumeAudioComponentRegistrations({ registrationData }), 0);
    313         });
    314     });
    315 }
    316 
    317289bool WebProcessProxy::messageSourceIsValidWebContentProcess()
    318290{
  • trunk/Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp

    r285479 r286037  
    6464#endif
    6565
     66#if PLATFORM(COCOA)
     67#include "AudioComponentRegistration.h"
     68#endif
     69
    6670#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, this->connection())
    6771
     
    440444
    441445#if PLATFORM(COCOA)
     446    sendAudioComponentRegistrations<Messages::GPUProcess::ConsumeAudioComponentRegistrations>(*this);
     447
    442448    // Use any session ID to get any Website data store. It is OK to use any Website data store,
    443449    // since we are using it to access any Networking process, which all have the XPC endpoint.
  • trunk/Source/WebKit/UIProcess/WebProcessPool.cpp

    r286012 r286037  
    131131
    132132#if PLATFORM(COCOA)
     133#include "AudioComponentRegistration.h"
    133134#include "DefaultWebBrowserChecks.h"
    134135#include <WebCore/GameControllerGamepadProvider.h>
     
    879880
    880881#if PLATFORM(COCOA)
    881     process.sendAudioComponentRegistrations();
     882    sendAudioComponentRegistrations<Messages::WebProcess::ConsumeAudioComponentRegistrations>(process);
    882883#endif
    883884
  • trunk/Source/WebKit/UIProcess/WebProcessProxy.h

    r286012 r286037  
    340340    void grantAudioCaptureExtension() { m_mediaCaptureSandboxExtensions |= Audio; }
    341341    void revokeAudioCaptureExtension() { m_mediaCaptureSandboxExtensions &= ~Audio; }
    342 
    343     void sendAudioComponentRegistrations();
    344342#endif
    345343
  • trunk/Source/WebKit/WebAuthnProcess/mac/com.apple.WebKit.WebAuthnProcess.sb.in

    r285612 r286037  
    327327    (with report) (with telemetry)
    328328#endif
    329     (global-name "com.apple.audio.AudioComponentRegistrar")
    330329    (global-name "com.apple.awdd")
    331330#if !ENABLE(CFPREFS_DIRECT_MODE)
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r286019 r286037  
    19461946                E39628DD23960CC600658ECD /* WebDeviceOrientationUpdateProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = E39628DB23960CC500658ECD /* WebDeviceOrientationUpdateProvider.h */; };
    19471947                E39628DE23960CC600658ECD /* WebDeviceOrientationUpdateProvider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E39628DC23960CC600658ECD /* WebDeviceOrientationUpdateProvider.cpp */; };
     1948                E3C2396D2721C9C200E37537 /* AudioComponentRegistration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E3C2396B2721C9C100E37537 /* AudioComponentRegistration.cpp */; };
     1949                E3C2396E2721C9C200E37537 /* AudioComponentRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C2396C2721C9C200E37537 /* AudioComponentRegistration.h */; };
    19481950                E3CAAA442413279900CED2E2 /* AccessibilitySupportSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = E3CAAA432413278A00CED2E2 /* AccessibilitySupportSPI.h */; };
    19491951                E413F59D1AC1ADC400345360 /* NetworkCacheEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = E413F59B1AC1ADB600345360 /* NetworkCacheEntry.h */; };
     
    60576059                E3BCE877267252120011D8DB /* AccessibilityPreferences.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AccessibilityPreferences.cpp; sourceTree = "<group>"; };
    60586060                E3BCE878267252120011D8DB /* AccessibilityPreferences.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AccessibilityPreferences.h; sourceTree = "<group>"; };
     6061                E3C2396B2721C9C100E37537 /* AudioComponentRegistration.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AudioComponentRegistration.cpp; sourceTree = "<group>"; };
     6062                E3C2396C2721C9C200E37537 /* AudioComponentRegistration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AudioComponentRegistration.h; sourceTree = "<group>"; };
    60596063                E3CAAA432413278A00CED2E2 /* AccessibilitySupportSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilitySupportSPI.h; sourceTree = "<group>"; };
    60606064                E3EFB02C2550617C003C2F96 /* WebSystemSoundDelegate.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebSystemSoundDelegate.cpp; sourceTree = "<group>"; };
     
    85538557                                A175C44921AA3170000037D0 /* ArgumentCodersCocoa.h */,
    85548558                                A175C44B21AA331B000037D0 /* ArgumentCodersCocoa.mm */,
     8559                                E3C2396B2721C9C100E37537 /* AudioComponentRegistration.cpp */,
     8560                                E3C2396C2721C9C200E37537 /* AudioComponentRegistration.h */,
    85558561                                1A698F171E4910220064E881 /* AuxiliaryProcessCocoa.mm */,
    85568562                                CE11AD511CBC482F00681EE5 /* CodeSigning.h */,
     
    1231312319                                AAFA634F234F7C6400FFA864 /* AsyncRevalidation.h in Headers */,
    1231412320                                BCEE966D112FAF57006BCC24 /* Attachment.h in Headers */,
     12321                                E3C2396E2721C9C200E37537 /* AudioComponentRegistration.h in Headers */,
    1231512322                                512F589712A8838800629530 /* AuthenticationChallengeProxy.h in Headers */,
    1231612323                                512F589912A8838800629530 /* AuthenticationDecisionListener.h in Headers */,
     
    1458314590                                2DEB1D2E2127473600933906 /* ArgumentCodersCF.cpp in Sources */,
    1458414591                                2D92A77C212B6A7100F493FD /* Attachment.cpp in Sources */,
     14592                                E3C2396D2721C9C200E37537 /* AudioComponentRegistration.cpp in Sources */,
    1458514593                                CD4570D424411D0F00A3DCEB /* AudioSessionRoutingArbitrator.cpp in Sources */,
    1458614594                                CD4570D3244113B500A3DCEB /* AudioSessionRoutingArbitratorProxyMessageReceiver.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.