[GTK] Add seccomp filters support
[WebKit-https.git] / Source / WebKit2 / WebProcess / gtk / SeccompFiltersWebProcessGtk.cpp
1 /*
2  * Copyright (C) 2013 Intel Corporation. All rights reserved.
3  * Copyright (C) 2015 Igalia S.L.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
18  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
24  * THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #include "config.h"
28 #include "SeccompFiltersWebProcessGtk.h"
29
30 #if ENABLE(SECCOMP_FILTERS)
31
32 #include "SeccompBroker.h"
33 #include "WebProcessCreationParameters.h"
34 #include <glib.h>
35 #include <sys/types.h>
36 #include <unistd.h>
37
38 namespace WebKit {
39
40 SeccompFiltersWebProcessGtk::SeccompFiltersWebProcessGtk(const WebProcessCreationParameters& parameters)
41     : SeccompFilters(Allow)
42 {
43     m_policy.addDefaultWebProcessPolicy(parameters);
44 }
45
46 void SeccompFiltersWebProcessGtk::platformInitialize()
47 {
48     // TODO: We should block all the syscalls and whitelist
49     // what we need + trap what should be handled by the broker.
50     addRule("open", Trap);
51     addRule("openat", Trap);
52     addRule("creat", Trap);
53
54 #if USE(GSTREAMER)
55     m_policy.addDirectoryPermission(String::fromUTF8(g_get_user_cache_dir()) + "/gstreamer-1.0", SyscallPolicy::ReadAndWrite);
56     m_policy.addDirectoryPermission(String::fromUTF8(g_get_user_data_dir()) + "/gstreamer-1.0", SyscallPolicy::ReadAndWrite);
57     m_policy.addDirectoryPermission(String::fromUTF8(LIBEXECDIR) + "/gstreamer-1.0", SyscallPolicy::Read);
58 #endif
59
60     m_policy.addDirectoryPermission(String::fromUTF8(g_get_user_data_dir()) + "/gvfs-metadata", SyscallPolicy::ReadAndWrite);
61
62     // For libXau
63     m_policy.addDirectoryPermission(ASCIILiteral("/run/gdm"), SyscallPolicy::Read);
64
65     SeccompBroker::launchProcess(this, m_policy);
66 }
67
68 } // namespace WebKit
69
70 #endif // ENABLE(SECCOMP_FILTERS)