From 7386fac05b9c73f1f0d8f387dfeae517525b0a59 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Tue, 18 May 2021 08:36:14 +0200 Subject: [PATCH] SELinux improvements Resolves: bz#1961488 --- ...b-runtime-ximage-byteorder-selection.patch | 43 ++++ ...ing-compression-and-correct-location.patch | 39 ++++ tigervnc-selinux-policy-improvements.patch | 183 ++++++++++++++++++ tigervnc.spec | 47 +++-- 4 files changed, 297 insertions(+), 15 deletions(-) create mode 100644 tigervnc-argb-runtime-ximage-byteorder-selection.patch create mode 100644 tigervnc-selinux-missing-compression-and-correct-location.patch create mode 100644 tigervnc-selinux-policy-improvements.patch diff --git a/tigervnc-argb-runtime-ximage-byteorder-selection.patch b/tigervnc-argb-runtime-ximage-byteorder-selection.patch new file mode 100644 index 0000000..24fc077 --- /dev/null +++ b/tigervnc-argb-runtime-ximage-byteorder-selection.patch @@ -0,0 +1,43 @@ +From 7ab92639848a6059e2b6b88499b008b9606f3af6 Mon Sep 17 00:00:00 2001 +From: johnmartin-oracle <55413843+johnmartin-oracle@users.noreply.github.com> +Date: Thu, 27 Aug 2020 22:30:23 -0400 +Subject: [PATCH] Update Surface_X11.cxx + +Runtime sellection of ARGB XImage byte order +--- + vncviewer/Surface_X11.cxx | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/vncviewer/Surface_X11.cxx b/vncviewer/Surface_X11.cxx +index 6562634dc..8944c3f71 100644 +--- a/vncviewer/Surface_X11.cxx ++++ b/vncviewer/Surface_X11.cxx +@@ -123,17 +123,17 @@ void Surface::alloc() + // we find such a format + templ.type = PictTypeDirect; + templ.depth = 32; +-#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +- templ.direct.alpha = 0; +- templ.direct.red = 8; +- templ.direct.green = 16; +- templ.direct.blue = 24; +-#else +- templ.direct.alpha = 24; +- templ.direct.red = 16; +- templ.direct.green = 8; +- templ.direct.blue = 0; +-#endif ++ if (XImageByteOrder(fl_display) == MSBFirst) { ++ templ.direct.alpha = 0; ++ templ.direct.red = 8; ++ templ.direct.green = 16; ++ templ.direct.blue = 24; ++ } else { ++ templ.direct.alpha = 24; ++ templ.direct.red = 16; ++ templ.direct.green = 8; ++ templ.direct.blue = 0; ++ } + templ.direct.alphaMask = 0xff; + templ.direct.redMask = 0xff; + templ.direct.greenMask = 0xff; diff --git a/tigervnc-selinux-missing-compression-and-correct-location.patch b/tigervnc-selinux-missing-compression-and-correct-location.patch new file mode 100644 index 0000000..2ec1be8 --- /dev/null +++ b/tigervnc-selinux-missing-compression-and-correct-location.patch @@ -0,0 +1,39 @@ +From 6125695b80f6a43002f454786115b0a6c1730831 Mon Sep 17 00:00:00 2001 +From: Jan Grulich +Date: Mon, 17 May 2021 13:44:32 +0200 +Subject: [PATCH] SELinux: Add missing compression and install policy to + correct directory + +--- + unix/vncserver/selinux/Makefile | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +diff --git a/unix/vncserver/selinux/Makefile b/unix/vncserver/selinux/Makefile +index 7497bf846..b23f20f60 100644 +--- a/unix/vncserver/selinux/Makefile ++++ b/unix/vncserver/selinux/Makefile +@@ -10,15 +10,18 @@ + PREFIX=/usr + DATADIR=$(PREFIX)/share + +-all: vncsession.pp ++all: vncsession.pp.bz2 ++ ++%.pp.bz2: %.pp ++ bzip2 -9 $^ + + %.pp: %.te + make -f $(DATADIR)/selinux/devel/Makefile $@ + + clean: +- rm -f *.pp ++ rm -f *.pp *.pp.bz2 + rm -rf tmp + +-install: vncsession.pp +- mkdir -p $(DESTDIR)$(DATADIR)/selinux/packages +- install vncsession.pp $(DESTDIR)$(DATADIR)/selinux/packages/vncsession.pp ++install: vncsession.pp.bz2 ++ mkdir -p $(DESTDIR)$(DATADIR)/selinux/packages/targeted/ ++ install vncsession.pp.bz2 $(DESTDIR)$(DATADIR)/selinux/packages/targeted/vncsession.pp.bz2 + diff --git a/tigervnc-selinux-policy-improvements.patch b/tigervnc-selinux-policy-improvements.patch new file mode 100644 index 0000000..c797b18 --- /dev/null +++ b/tigervnc-selinux-policy-improvements.patch @@ -0,0 +1,183 @@ +From 386542e6d50eeaa68aa91f821c0725ddd0ab9b2a Mon Sep 17 00:00:00 2001 +From: Vit Mojzis +Date: Tue, 18 May 2021 12:23:15 +0200 +Subject: [PATCH] selinux: Fix issues reported by SELint + +Style guide [1] issues only. No impact on policy functionality. + +[1] - https://github.com/TresysTechnology/refpolicy/wiki/StyleGuide +--- + unix/vncserver/selinux/vncsession.te | 7 +++---- + 1 file changed, 3 insertions(+), 4 deletions(-) + +diff --git a/unix/vncserver/selinux/vncsession.te b/unix/vncserver/selinux/vncsession.te +index a773fed39..63ad8a85f 100644 +--- a/unix/vncserver/selinux/vncsession.te ++++ b/unix/vncserver/selinux/vncsession.te +@@ -17,7 +17,7 @@ + # USA. + # + +-policy_module(vncsession, 1.0.0); ++policy_module(vncsession, 1.0.0) + + gen_require(` + attribute userdomain; +@@ -42,8 +42,8 @@ can_exec(vnc_session_t, vnc_session_exec_t) + userdom_spec_domtrans_all_users(vnc_session_t) + userdom_signal_all_users(vnc_session_t) + +-allow vnc_session_t self:capability { kill chown dac_override dac_read_search fowner setgid setuid sys_resource }; +-allow vnc_session_t self:process { getcap setsched setexec setrlimit }; ++allow vnc_session_t self:capability { chown dac_override dac_read_search fowner kill setgid setuid sys_resource }; ++allow vnc_session_t self:process { getcap setexec setrlimit setsched }; + allow vnc_session_t self:fifo_file rw_fifo_file_perms; + + manage_files_pattern(vnc_session_t, xdm_home_t, xdm_home_t) +@@ -65,4 +65,3 @@ logging_append_all_logs(vnc_session_t) + + mcs_process_set_categories(vnc_session_t) + mcs_killall(vnc_session_t) +- +From 23cf514ac265a02dc666e8651dcc579022f0da77 Mon Sep 17 00:00:00 2001 +From: Zdenek Pytela +Date: Tue, 18 May 2021 13:31:53 +0200 +Subject: [PATCH] selinux: further style and comprehensibility improvements + +Sections and rules blocks reordered according to the Style guide. + +https://github.com/TresysTechnology/refpolicy/wiki/StyleGuide +--- + unix/vncserver/selinux/vncsession.te | 59 +++++++++++++++++----------- + 1 file changed, 36 insertions(+), 23 deletions(-) + +diff --git a/unix/vncserver/selinux/vncsession.te b/unix/vncserver/selinux/vncsession.te +index 63ad8a85f..86fd6e5ef 100644 +--- a/unix/vncserver/selinux/vncsession.te ++++ b/unix/vncserver/selinux/vncsession.te +@@ -20,48 +20,61 @@ + policy_module(vncsession, 1.0.0) + + gen_require(` +- attribute userdomain; +- type xdm_home_t; ++ attribute userdomain; ++ type xdm_home_t; + ') + +-type vnc_session_exec_t; +-corecmd_executable_file(vnc_session_exec_t) + type vnc_session_t; ++type vnc_session_exec_t; + init_daemon_domain(vnc_session_t, vnc_session_exec_t) +-auth_login_pgm_domain(vnc_session_t) ++can_exec(vnc_session_t, vnc_session_exec_t) + + type vnc_session_var_run_t; + files_pid_file(vnc_session_var_run_t) +-allow vnc_session_t vnc_session_var_run_t:file manage_file_perms; +-files_pid_filetrans(vnc_session_t, vnc_session_var_run_t, file) +- +-auth_write_login_records(vnc_session_t) +- +-can_exec(vnc_session_t, vnc_session_exec_t) +- +-userdom_spec_domtrans_all_users(vnc_session_t) +-userdom_signal_all_users(vnc_session_t) + + allow vnc_session_t self:capability { chown dac_override dac_read_search fowner kill setgid setuid sys_resource }; + allow vnc_session_t self:process { getcap setexec setrlimit setsched }; + allow vnc_session_t self:fifo_file rw_fifo_file_perms; + ++allow vnc_session_t vnc_session_var_run_t:file manage_file_perms; ++files_pid_filetrans(vnc_session_t, vnc_session_var_run_t, file) ++ + manage_files_pattern(vnc_session_t, xdm_home_t, xdm_home_t) + manage_fifo_files_pattern(vnc_session_t, xdm_home_t, xdm_home_t) + manage_sock_files_pattern(vnc_session_t, xdm_home_t, xdm_home_t) + manage_lnk_files_pattern(vnc_session_t, xdm_home_t, xdm_home_t) +-userdom_user_home_dir_filetrans(vnc_session_t, xdm_home_t, dir, ".vnc") +-userdom_admin_home_dir_filetrans(vnc_session_t, xdm_home_t, dir, ".vnc") +- +-# This also affects other tools, e.g. vncpasswd +-userdom_admin_home_dir_filetrans(userdomain, xdm_home_t, dir, ".vnc") +-userdom_user_home_dir_filetrans(userdomain, xdm_home_t, dir, ".vnc") +- +-miscfiles_read_localization(vnc_session_t) + + kernel_read_kernel_sysctls(vnc_session_t) + +-logging_append_all_logs(vnc_session_t) ++corecmd_executable_file(vnc_session_exec_t) + + mcs_process_set_categories(vnc_session_t) + mcs_killall(vnc_session_t) ++ ++optional_policy(` ++ auth_login_pgm_domain(vnc_session_t) ++ auth_write_login_records(vnc_session_t) ++') ++ ++optional_policy(` ++ logging_append_all_logs(vnc_session_t) ++') ++ ++optional_policy(` ++ miscfiles_read_localization(vnc_session_t) ++') ++ ++optional_policy(` ++ userdom_spec_domtrans_all_users(vnc_session_t) ++ userdom_signal_all_users(vnc_session_t) ++ ++ userdom_user_home_dir_filetrans(vnc_session_t, xdm_home_t, dir, ".vnc") ++ userdom_admin_home_dir_filetrans(vnc_session_t, xdm_home_t, dir, ".vnc") ++ ++ # This also affects other tools, e.g. vncpasswd ++ gen_require(` ++ attribute userdomain; ++ ') ++ userdom_admin_home_dir_filetrans(userdomain, xdm_home_t, dir, ".vnc") ++ userdom_user_home_dir_filetrans(userdomain, xdm_home_t, dir, ".vnc") ++') +From 3c8622691abfb377b48bf3749dd629c5a7120cf4 Mon Sep 17 00:00:00 2001 +From: Zdenek Pytela +Date: Tue, 18 May 2021 13:39:11 +0200 +Subject: [PATCH] Allow vnc_session_t manage nfs dirs and files conditionally + +The permissions set to manage directories and files with the nfs_t type +is allowed when the use_nfs_home_dirs boolean is turned on. + +Resolves: https://github.com/TigerVNC/tigervnc/issues/1189 +--- + unix/vncserver/selinux/vncsession.te | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/unix/vncserver/selinux/vncsession.te b/unix/vncserver/selinux/vncsession.te +index 86fd6e5ef..46e699117 100644 +--- a/unix/vncserver/selinux/vncsession.te ++++ b/unix/vncserver/selinux/vncsession.te +@@ -51,6 +51,11 @@ corecmd_executable_file(vnc_session_exec_t) + mcs_process_set_categories(vnc_session_t) + mcs_killall(vnc_session_t) + ++tunable_policy(`use_nfs_home_dirs',` ++ fs_manage_nfs_dirs(vnc_session_t) ++ fs_manage_nfs_files(vnc_session_t) ++') ++ + optional_policy(` + auth_login_pgm_domain(vnc_session_t) + auth_write_login_records(vnc_session_t) +diff --git a/unix/vncserver/selinux/vncsession.te b/unix/vncserver/selinux/vncsession.te +index 46e69911..f1108ec8 100644 +--- a/unix/vncserver/selinux/vncsession.te ++++ b/unix/vncserver/selinux/vncsession.te +@@ -20,7 +20,6 @@ + policy_module(vncsession, 1.0.0) + + gen_require(` +- attribute userdomain; + type xdm_home_t; + ') + diff --git a/tigervnc.spec b/tigervnc.spec index 9d06a44..bfc8020 100644 --- a/tigervnc.spec +++ b/tigervnc.spec @@ -1,6 +1,11 @@ + +#defining macros needed by SELinux +%global selinuxtype targeted +%global modulename vncsession + Name: tigervnc Version: 1.11.0 -Release: 13%{?dist} +Release: 14%{?dist} Summary: A TigerVNC remote display system %global _hardened_build 1 @@ -31,6 +36,9 @@ Patch8: tigervnc-use-gnome-as-default-session.patch Patch50: tigervnc-tolerate-specifying-boolparam.patch Patch51: tigervnc-systemd-service.patch Patch52: tigervnc-correctly-start-vncsession-as-daemon.patch +Patch53: tigervnc-selinux-missing-compression-and-correct-location.patch +Patch54: tigervnc-selinux-policy-improvements.patch +Patch55: tigervnc-argb-runtime-ximage-byteorder-selection.patch # This is tigervnc-%%{version}/unix/xserver116.patch rebased on the latest xorg Patch100: tigervnc-xserver120.patch @@ -78,7 +86,7 @@ server. Summary: A TigerVNC server Requires: perl-interpreter Requires: tigervnc-server-minimal = %{version}-%{release} -Requires: tigervnc-selinux = %{version}-%{release} +Requires: (%{name}-selinux if selinux-policy-%{selinuxtype}) Requires: xorg-x11-xauth Requires: xorg-x11-xinit Requires(post): systemd @@ -135,10 +143,11 @@ This package contains icons for TigerVNC viewer %package selinux Summary: SELinux module for TigerVNC BuildArch: noarch -Requires(pre): libselinux-utils -Requires(post): selinux-policy >= %{_selinux_policy_version} -Requires(post): policycoreutils -Requires(post): libselinux-utils +BuildRequires: selinux-policy-devel +Requires: selinux-policy-%{selinuxtype} +Requires(post): selinux-policy-%{selinuxtype} +BuildRequires: selinux-policy-devel +%{?selinux_requires} %description selinux This package provides the SELinux policy module to ensure TigerVNC @@ -182,6 +191,9 @@ popd %patch50 -p1 -b .tolerate-specifying-boolparam %patch51 -p1 -b .systemd-service %patch52 -p1 -b .correctly-start-vncsession-as-daemon +%patch53 -p1 -b .selinux-missing-compression-and-correct-location +%patch54 -p1 -b .selinux-policy-improvements +%patch55 -p1 -b .argb-runtime-ximage-byteorder-selection %build %ifarch sparcv9 sparc64 s390 s390x @@ -301,19 +313,16 @@ install -m 644 %{SOURCE4} %{buildroot}/%{_docdir}/tigervnc/HOWTO.md %systemd_postun xvnc.socket %pre selinux -%selinux_relabel_pre +%selinux_relabel_pre -s %{selinuxtype} %post selinux -%selinux_modules_install %{_datadir}/selinux/packages/vncsession.pp -%selinux_relabel_post - -%posttrans selinux -%selinux_relabel_post +%selinux_modules_install -s %{selinuxtype} %{_datadir}/selinux/packages/%{selinuxtype}/%{modulename}.pp.bz2 +%selinux_relabel_post -s %{selinuxtype} %postun selinux -%selinux_modules_uninstall vncsession if [ $1 -eq 0 ]; then - %selinux_relabel_post + %selinux_modules_uninstall -s %{selinuxtype} %{modulename} + %selinux_relabel_post -s %{selinuxtype} fi @@ -360,9 +369,17 @@ fi %{_datadir}/icons/hicolor/*/apps/* %files selinux -%{_datadir}/selinux/packages/vncsession.pp +%{_datadir}/selinux/packages/%{selinuxtype}/%{modulename}.pp.* +%ghost %verify(not md5 size mtime) %{_sharedstatedir}/selinux/%{selinuxtype}/active/modules/200/%{modulename} %changelog +* Mon May 17 2021 Jan Grulich - 1.11.0-14 +- SELinux improvements + Resolves: bz#1961488 + +- Fix endianness issue on s390x + Resolves: bz#1963029 + * Fri Apr 16 2021 Mohan Boddu - 1.11.0-13 - Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937