Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp5560559ybv; Tue, 11 Feb 2020 18:39:27 -0800 (PST) X-Google-Smtp-Source: APXvYqwJTlHxv6C8D9V3/k3C1PhSH148c7uHl2YHbgSGyymzhpCgG/d539X/SmuKI/5IKEfHFGKE X-Received: by 2002:a05:6830:15c2:: with SMTP id j2mr7158013otr.351.1581475167258; Tue, 11 Feb 2020 18:39:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581475167; cv=none; d=google.com; s=arc-20160816; b=gXZoyA9rkNc8X8Uh32Hmh3ZZO2ugWvfKfjyTL5Cbzdld4AybT/o8v8LLZHgB0tgcG2 xvy3IRpq4jIzhUqy8sMc5npbDRMMNC1igQSnATf6wkiaHxgcJ6/soonjtzvLAuF8iqu4 IMkUEuLHSYwXWxJ0nHtfWCf/XSRkwxQsBlBK72UMA7U+BKcMODt7cv1dTsPvqzdRi8mX gK0rmOir7MHi3ARLzWKKWtrACtLNQNlRhgVjCI84XC76+JO2NbethFHcyjvgn9jZWHoL pFBrPX9PcwnY9N71RWVMg44LLlv3zzQYuH1bsAMvjULAlip2IkTspUT1Nw0p9QzDL6wD lbOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:reply-to:to:from:dkim-signature; bh=8P1TExXbbNr9SBwD/B2AZO+QQ1c7pDii1fEjrn0vdic=; b=fWwULxkgjkNn2IVE06ULytKY+tG/jkFwBnU2y5csqKmqAgbM9hZ1dggzER3Idfi8yO do6ljOaNQmsFi9+g2q9kshrm2v9bclS0HnG6v56gt9ei6e/0ia5CI0ZWH9ZGqVb9iCta HMYxlK+wLecqh2AH/hFHD3uIv+0ZevR7svEMDQgLOU3rFnywfoXO+039qYhhcTmC6wLj G68JT9NdzkBvz4iDlUsRYnMqm1Dc71j1rARWHNgVaSYL2GTdxZdnFwLPPYJbuFrNhsPa PHX3clumkVWYk1F08AABiy4m6/LAEg3iDfEl0JpRHxtgQERiVKS3yoO0zUCFhkuo6h7H dr8g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@coker.com.au header.s=2008 header.b="IqHqVTq/"; spf=pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=coker.com.au Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z7si2481972oid.150.2020.02.11.18.39.23; Tue, 11 Feb 2020 18:39:25 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@coker.com.au header.s=2008 header.b="IqHqVTq/"; spf=pass (google.com: best guess record for domain of selinux-refpolicy-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=selinux-refpolicy-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=coker.com.au Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727653AbgBLCie (ORCPT + 13 others); Tue, 11 Feb 2020 21:38:34 -0500 Received: from smtp.sws.net.au ([46.4.88.250]:44214 "EHLO smtp.sws.net.au" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727584AbgBLCie (ORCPT ); Tue, 11 Feb 2020 21:38:34 -0500 X-Greylist: delayed 466 seconds by postgrey-1.27 at vger.kernel.org; Tue, 11 Feb 2020 21:38:32 EST Received: from xev.coker.com.au (localhost [127.0.0.1]) by smtp.sws.net.au (Postfix) with ESMTP id CDB4DEDB8 for ; Wed, 12 Feb 2020 13:30:44 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=coker.com.au; s=2008; t=1581474645; bh=8P1TExXbbNr9SBwD/B2AZO+QQ1c7pDii1fEjrn0vdic=; l=11553; h=From:To:Reply-To:Subject:Date:From; b=IqHqVTq/o0uXlyXNh/aQF3NfEAk01D3iDoIr4v4YHrVMolEKiEOkU/7BlbfjFLkLI XTab5WrXUfZsnRVFlMGT3KrLRG2p4hGPzpkCR57Z5y465Jmx8c5UrBGsB4GtGf/Qov VpEY1xMOX5/5X54vxfMS3X9XqHM47ABfWf2PXNvw= Received: by xev.coker.com.au (Postfix, from userid 1001) id C36B8F2C7B1; Wed, 12 Feb 2020 13:30:39 +1100 (AEDT) From: Russell Coker To: "selinux-refpolicy@vger.kernel.org" Reply-To: russell@coker.com.au Subject: Chrome/Chromium patches Date: Wed, 12 Feb 2020 13:30:39 +1100 Message-ID: <4241549.o4G3l8VaYd@xev> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="nextPart1956522.IRaZVbqH5m" Content-Transfer-Encoding: 7Bit Sender: selinux-refpolicy-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: selinux-refpolicy@vger.kernel.org This is a multi-part message in MIME format. --nextPart1956522.IRaZVbqH5m Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" The attached patch against the git refpolicy from 3 days ago makes Chrome work with Pulseaudio, DRI, Flash, and lots of little things. Adds tunables chromium_exec_plugins and xserver_allow_dri. I think this is ready to merge with the names of the tunables and interfaces being the only possible changes needed. -- My Main Blog http://etbe.coker.com.au/ My Documents Blog http://doc.coker.com.au/ --nextPart1956522.IRaZVbqH5m Content-Disposition: attachment; filename="chromium.diff" Content-Transfer-Encoding: 7Bit Content-Type: text/x-patch; charset="UTF-8"; name="chromium.diff" Chromium and DRI policy Index: refpolicy-2.20200209/policy/modules/apps/chromium.te =================================================================== --- refpolicy-2.20200209.orig/policy/modules/apps/chromium.te +++ refpolicy-2.20200209/policy/modules/apps/chromium.te @@ -39,6 +39,13 @@ gen_tunable(chromium_bind_tcp_unreserved ## gen_tunable(chromium_rw_usb_dev, false) +## +##

+## Allow chromium to execute it's config (for plugins like Flash) +##

+##
+gen_tunable(chromium_exec_plugins, false) + type chromium_t; domain_dyntrans_type(chromium_t) @@ -63,6 +70,9 @@ type chromium_tmpfs_t; userdom_user_tmpfs_file(chromium_tmpfs_t) optional_policy(` pulseaudio_tmpfs_content(chromium_tmpfs_t) + pulseaudio_rw_tmpfs_files(chromium_t) + pulseaudio_stream_connect(chromium_t) + pulseaudio_use_fds(chromium_t) ') type chromium_xdg_config_t; @@ -77,7 +87,9 @@ xdg_cache_content(chromium_xdg_cache_t) # # execmem for load in plugins -allow chromium_t self:process { execmem getsched getcap setcap setrlimit setsched sigkill signal }; +allow chromium_t self:process { execmem getsched getcap setcap setrlimit setsched sigkill signal signull }; +allow chromium_t self:dir { write add_name }; +allow chromium_t self:file create; allow chromium_t self:fifo_file rw_fifo_file_perms; allow chromium_t self:sem create_sem_perms; allow chromium_t self:netlink_kobject_uevent_socket client_stream_socket_perms; @@ -96,6 +108,7 @@ allow chromium_t chromium_renderer_t:uni allow chromium_t chromium_sandbox_t:unix_dgram_socket { getattr read write }; allow chromium_t chromium_sandbox_t:unix_stream_socket { getattr read write }; +allow chromium_t chromium_sandbox_t:file read_file_perms; allow chromium_t chromium_naclhelper_t:process { share }; @@ -108,6 +121,9 @@ manage_sock_files_pattern(chromium_t, ch manage_fifo_files_pattern(chromium_t, chromium_tmp_t, chromium_tmp_t) files_tmp_filetrans(chromium_t, chromium_tmp_t, { file dir sock_file }) +# for /run/user/$UID +userdom_user_runtime_filetrans(chromium_t, chromium_tmp_t, { file sock_file }) + manage_files_pattern(chromium_t, chromium_tmpfs_t, chromium_tmpfs_t) allow chromium_t chromium_tmpfs_t:file map; fs_tmpfs_filetrans(chromium_t, chromium_tmpfs_t, file) @@ -128,7 +144,11 @@ dyntrans_pattern(chromium_t, chromium_re domtrans_pattern(chromium_t, chromium_sandbox_exec_t, chromium_sandbox_t) domtrans_pattern(chromium_t, chromium_naclhelper_exec_t, chromium_naclhelper_t) +# for self:file create +kernel_associate_proc(chromium_t) + kernel_list_proc(chromium_t) +kernel_read_kernel_sysctls(chromium_t) kernel_read_net_sysctls(chromium_t) corecmd_exec_bin(chromium_t) @@ -145,6 +165,9 @@ dev_read_sound(chromium_t) dev_write_sound(chromium_t) dev_read_urand(chromium_t) dev_read_rand(chromium_t) +tunable_policy(`xserver_allow_dri', ` + dev_rw_dri(chromium_t) +') dev_rw_xserver_misc(chromium_t) dev_map_xserver_misc(chromium_t) @@ -178,14 +201,15 @@ userdom_use_user_terminals(chromium_t) userdom_manage_user_certs(chromium_t) userdom_user_home_dir_filetrans_user_cert(chromium_t, dir, ".pki") -xdg_create_cache_dirs(chromium_t) -xdg_create_config_dirs(chromium_t) -xdg_create_data_dirs(chromium_t) +xdg_manage_cache(chromium_t) +xdg_manage_config(chromium_t) +xdg_manage_data(chromium_t) xdg_manage_downloads(chromium_t) -xdg_read_config_files(chromium_t) -xdg_read_data_files(chromium_t) xserver_user_x_domain_template(chromium, chromium_t, chromium_tmpfs_t) +xserver_stream_connect_xdm(chromium_t) + +xserver_manage_mesa_shader_cache(chromium_t) tunable_policy(`chromium_bind_tcp_unreserved_ports',` corenet_tcp_bind_generic_node(chromium_t) @@ -198,6 +222,11 @@ tunable_policy(`chromium_rw_usb_dev',` udev_read_db(chromium_t) ') +tunable_policy(`chromium_exec_plugins',` + # sometimes .config/google-chrome/PepperFlash/32.0.0.142/libpepflashplayer.so gets chromium_tmp_t + can_exec(chromium_t, { chromium_xdg_config_t chromium_tmp_t }) +') + tunable_policy(`chromium_read_system_info',` kernel_read_kernel_sysctls(chromium_t) # Memory optimizations & optimizations based on OS/version @@ -229,6 +258,10 @@ optional_policy(` ') optional_policy(` + networkmanager_dbus_chat(chromium_t) +') + +optional_policy(` dbus_all_session_bus_client(chromium_t) dbus_system_bus_client(chromium_t) @@ -241,8 +274,13 @@ optional_policy(` ') optional_policy(` + devicekit_dbus_chat_disk(chromium_t) devicekit_dbus_chat_power(chromium_t) ') + + optional_policy(` + systemd_dbus_chat_hostnamed(chromium_t) + ') ') optional_policy(` @@ -252,6 +290,10 @@ optional_policy(` dpkg_read_db(chromium_t) ') +optional_policy(` + ssh_dontaudit_agent_tmp(chromium_t) +') + ifdef(`use_alsa',` optional_policy(` alsa_domain(chromium_t, chromium_tmpfs_t) @@ -259,6 +301,7 @@ ifdef(`use_alsa',` optional_policy(` pulseaudio_domtrans(chromium_t) + pulseaudio_read_home(chromium_t) ') ') @@ -299,6 +342,9 @@ userdom_use_user_terminals(chromium_rend xdg_read_config_files(chromium_renderer_t) +# should we have a tunable for this? +xdg_read_pictures(chromium_t) + xserver_user_x_domain_template(chromium_renderer, chromium_renderer_t, chromium_tmpfs_t) tunable_policy(`chromium_read_system_info',` @@ -360,3 +406,6 @@ tunable_policy(`chromium_read_system_inf dev_read_sysfs(chromium_naclhelper_t) dev_read_urand(chromium_naclhelper_t) +kernel_list_proc(chromium_naclhelper_t) + +miscfiles_read_localization(chromium_naclhelper_t) Index: refpolicy-2.20200209/policy/modules/kernel/kernel.if =================================================================== --- refpolicy-2.20200209.orig/policy/modules/kernel/kernel.if +++ refpolicy-2.20200209/policy/modules/kernel/kernel.if @@ -2424,6 +2424,24 @@ interface(`kernel_rw_all_sysctls',` ######################################## ## +## Associate a file to proc_t (/proc) +## +## +## +## Domain allowed access. +## +## +## +# +interface(`kernel_associate_proc',` + gen_require(` + type proc_t; + ') + allow $1 proc_t:filesystem associate; +') + +######################################## +## ## Send a kill signal to unlabeled processes. ## ## Index: refpolicy-2.20200209/policy/modules/services/xserver.te =================================================================== --- refpolicy-2.20200209.orig/policy/modules/services/xserver.te +++ refpolicy-2.20200209/policy/modules/services/xserver.te @@ -55,6 +55,13 @@ gen_tunable(xserver_gnome_xdm, false) ## gen_tunable(xserver_object_manager, false) +## +##

+## Allow DRI access +##

+##
+gen_tunable(xserver_allow_dri, false) + attribute x_domain; # X Events Index: refpolicy-2.20200209/policy/modules/services/xserver.if =================================================================== --- refpolicy-2.20200209.orig/policy/modules/services/xserver.if +++ refpolicy-2.20200209/policy/modules/services/xserver.if @@ -48,8 +48,9 @@ interface(`xserver_restricted_role',` files_search_tmp($2) # Communicate via System V shared memory. + allow $2 xserver_t:fd use; allow $2 xserver_t:shm r_shm_perms; - allow $2 xserver_tmpfs_t:file read_file_perms; + allow $2 xserver_tmpfs_t:file { map read_file_perms }; # allow ps to show iceauth ps_process_pattern($2, iceauth_t) @@ -75,10 +76,6 @@ interface(`xserver_restricted_role',` allow $2 xdm_tmp_t:sock_file { read write }; dontaudit $2 xdm_t:tcp_socket { read write }; - # Client read xserver shm - allow $2 xserver_t:fd use; - allow $2 xserver_tmpfs_t:file read_file_perms; - # Read /tmp/.X0-lock allow $2 xserver_tmp_t:file { getattr read }; @@ -91,6 +88,9 @@ interface(`xserver_restricted_role',` # open office is looking for the following dev_getattr_agp_dev($2) dev_dontaudit_rw_dri($2) + tunable_policy(`xserver_allow_dri',` + dev_rw_dri($2) + ') # GNOME checks for usb and other devices: dev_rw_usbfs($2) @@ -1670,6 +1670,26 @@ interface(`xserver_rw_mesa_shader_cache' rw_dirs_pattern($1, mesa_shader_cache_t, mesa_shader_cache_t) rw_files_pattern($1, mesa_shader_cache_t, mesa_shader_cache_t) + xdg_search_cache_dirs($1) +') + +######################################## +## +## Manage the mesa shader cache. +## +## +## +## Domain allowed access. +## +## +# +interface(`xserver_manage_mesa_shader_cache',` + gen_require(` + type mesa_shader_cache_t; + ') + + manage_dirs_pattern($1, mesa_shader_cache_t, mesa_shader_cache_t) + manage_files_pattern($1, mesa_shader_cache_t, mesa_shader_cache_t) allow $1 mesa_shader_cache_t:file map; xdg_search_cache_dirs($1) Index: refpolicy-2.20200209/policy/modules/apps/chromium.if =================================================================== --- refpolicy-2.20200209.orig/policy/modules/apps/chromium.if +++ refpolicy-2.20200209/policy/modules/apps/chromium.if @@ -38,7 +38,15 @@ interface(`chromium_role',` allow $2 chromium_t:process signal_perms; allow $2 chromium_renderer_t:process signal_perms; + allow $2 chromium_sandbox_t:process signal_perms; allow $2 chromium_naclhelper_t:process signal_perms; + allow chromium_t $2:process { signull signal }; + allow $2 chromium_t:file manage_file_perms; + + allow $2 chromium_t:unix_stream_socket connectto; + + # for /tmp/.ICE-unix/* sockets + allow chromium_t $2:unix_stream_socket connectto; allow chromium_sandbox_t $2:fd use; allow chromium_naclhelper_t $2:fd use; @@ -109,6 +117,7 @@ interface(`chromium_domtrans',` gen_require(` type chromium_t; type chromium_exec_t; + class dbus send_msg; ') corecmd_search_bin($1) Index: refpolicy-2.20200209/policy/modules/services/ssh.if =================================================================== --- refpolicy-2.20200209.orig/policy/modules/services/ssh.if +++ refpolicy-2.20200209/policy/modules/services/ssh.if @@ -772,3 +772,21 @@ interface(`ssh_delete_tmp',` files_search_tmp($1) delete_files_pattern($1, sshd_tmp_t, sshd_tmp_t) ') + +####################################### +## +## dontaudit access to ssh agent tmp dirs +## +## +## +## Domain not to audit. +## +## +# +interface(`ssh_dontaudit_agent_tmp',` + gen_require(` + type ssh_agent_tmp_t; + ') + + dontaudit $1 ssh_agent_tmp_t:dir list_dir_perms; +') --nextPart1956522.IRaZVbqH5m--