++##
++## Allow unprivledged user to create and transition to svirt domains.
++##
++##
++gen_tunable(unprivuser_use_svirt, false)
++
+ # this module should be named user, but that is
+ # a compile error since user is a keyword.
+
+@@ -12,12 +19,90 @@ role user_r;
userdom_unpriv_user_template(user)
@@ -76145,7 +76178,7 @@ index 9f6d4c3..cad6364 100644
')
optional_policy(`
-@@ -25,6 +103,18 @@ optional_policy(`
+@@ -25,6 +110,18 @@ optional_policy(`
')
optional_policy(`
@@ -76164,7 +76197,7 @@ index 9f6d4c3..cad6364 100644
vlock_run(user_t, user_r)
')
-@@ -66,10 +156,6 @@ ifndef(`distro_redhat',`
+@@ -66,10 +163,6 @@ ifndef(`distro_redhat',`
')
optional_policy(`
@@ -76175,7 +76208,7 @@ index 9f6d4c3..cad6364 100644
gpg_role(user_r, user_t)
')
-@@ -102,10 +188,6 @@ ifndef(`distro_redhat',`
+@@ -102,10 +195,6 @@ ifndef(`distro_redhat',`
')
optional_policy(`
@@ -76186,7 +76219,7 @@ index 9f6d4c3..cad6364 100644
postgresql_role(user_r, user_t)
')
-@@ -128,7 +210,6 @@ ifndef(`distro_redhat',`
+@@ -128,7 +217,6 @@ ifndef(`distro_redhat',`
optional_policy(`
ssh_role_template(user, user_r, user_t)
')
@@ -76194,11 +76227,17 @@ index 9f6d4c3..cad6364 100644
optional_policy(`
su_role_template(user, user_r, user_t)
')
-@@ -161,3 +242,4 @@ ifndef(`distro_redhat',`
+@@ -161,3 +249,10 @@ ifndef(`distro_redhat',`
wireshark_role(user_r, user_t)
')
')
+
++
++virt_transition_svirt(user_t, user_r)
++virt_filetrans_home_content(user_t)
++tunable_policy(`unprivuser_use_svirt',`
++ virt_manage_images(user_t)
++')
diff --git a/policy/modules/services/postgresql.fc b/policy/modules/services/postgresql.fc
index a26f84f..4e52843 100644
--- a/policy/modules/services/postgresql.fc
@@ -79003,7 +79042,7 @@ index 130ced9..1b31c76 100644
+ files_search_tmp($1)
+')
diff --git a/policy/modules/services/xserver.te b/policy/modules/services/xserver.te
-index d40f750..c7e6040 100644
+index d40f750..3711d39 100644
--- a/policy/modules/services/xserver.te
+++ b/policy/modules/services/xserver.te
@@ -26,27 +26,50 @@ gen_require(`
@@ -79327,13 +79366,14 @@ index d40f750..c7e6040 100644
')
optional_policy(`
-@@ -299,64 +396,103 @@ optional_policy(`
+@@ -299,64 +396,104 @@ optional_policy(`
# XDM Local policy
#
-allow xdm_t self:capability { setgid setuid sys_resource kill sys_tty_config mknod chown dac_override dac_read_search fowner fsetid ipc_owner sys_nice sys_rawio net_bind_service };
-allow xdm_t self:process { setexec setpgid getsched setsched setrlimit signal_perms setkeycreate };
+allow xdm_t self:capability { setgid setuid sys_resource kill sys_tty_config mknod chown dac_override dac_read_search fowner fsetid ipc_owner sys_nice sys_rawio net_bind_service sys_ptrace };
++allow xdm_t self:capability2 { block_suspend };
+dontaudit xdm_t self:capability sys_admin;
+
+allow xdm_t self:process { setexec setpgid getattr getcap setcap getsched getsession setsched setrlimit signal_perms setkeycreate };
@@ -79441,7 +79481,7 @@ index d40f750..c7e6040 100644
# connect to xdm xserver over stream socket
stream_connect_pattern(xdm_t, xserver_tmp_t, xserver_tmp_t, xserver_t)
-@@ -365,20 +501,27 @@ stream_connect_pattern(xdm_t, xserver_tmp_t, xserver_tmp_t, xserver_t)
+@@ -365,20 +502,27 @@ stream_connect_pattern(xdm_t, xserver_tmp_t, xserver_tmp_t, xserver_t)
delete_files_pattern(xdm_t, xserver_tmp_t, xserver_tmp_t)
delete_sock_files_pattern(xdm_t, xserver_tmp_t, xserver_tmp_t)
@@ -79471,7 +79511,7 @@ index d40f750..c7e6040 100644
corenet_all_recvfrom_netlabel(xdm_t)
corenet_tcp_sendrecv_generic_if(xdm_t)
corenet_udp_sendrecv_generic_if(xdm_t)
-@@ -388,38 +531,48 @@ corenet_tcp_sendrecv_all_ports(xdm_t)
+@@ -388,38 +532,48 @@ corenet_tcp_sendrecv_all_ports(xdm_t)
corenet_udp_sendrecv_all_ports(xdm_t)
corenet_tcp_bind_generic_node(xdm_t)
corenet_udp_bind_generic_node(xdm_t)
@@ -79524,7 +79564,7 @@ index d40f750..c7e6040 100644
files_read_etc_files(xdm_t)
files_read_var_files(xdm_t)
-@@ -430,9 +583,25 @@ files_list_mnt(xdm_t)
+@@ -430,9 +584,25 @@ files_list_mnt(xdm_t)
files_read_usr_files(xdm_t)
# Poweroff wants to create the /poweroff file when run from xdm
files_create_boot_flag(xdm_t)
@@ -79550,7 +79590,7 @@ index d40f750..c7e6040 100644
storage_dontaudit_read_fixed_disk(xdm_t)
storage_dontaudit_write_fixed_disk(xdm_t)
-@@ -441,28 +610,38 @@ storage_dontaudit_raw_read_removable_device(xdm_t)
+@@ -441,28 +611,38 @@ storage_dontaudit_raw_read_removable_device(xdm_t)
storage_dontaudit_raw_write_removable_device(xdm_t)
storage_dontaudit_setattr_removable_dev(xdm_t)
storage_dontaudit_rw_scsi_generic(xdm_t)
@@ -79592,7 +79632,7 @@ index d40f750..c7e6040 100644
userdom_dontaudit_use_unpriv_user_fds(xdm_t)
userdom_create_all_users_keys(xdm_t)
-@@ -471,24 +650,43 @@ userdom_read_user_home_content_files(xdm_t)
+@@ -471,24 +651,43 @@ userdom_read_user_home_content_files(xdm_t)
# Search /proc for any user domain processes.
userdom_read_all_users_state(xdm_t)
userdom_signal_all_users(xdm_t)
@@ -79642,7 +79682,7 @@ index d40f750..c7e6040 100644
tunable_policy(`xdm_sysadm_login',`
userdom_xsession_spec_domtrans_all_users(xdm_t)
# FIXME:
-@@ -502,11 +700,21 @@ tunable_policy(`xdm_sysadm_login',`
+@@ -502,11 +701,21 @@ tunable_policy(`xdm_sysadm_login',`
')
optional_policy(`
@@ -79664,7 +79704,7 @@ index d40f750..c7e6040 100644
')
optional_policy(`
-@@ -514,12 +722,64 @@ optional_policy(`
+@@ -514,12 +723,64 @@ optional_policy(`
')
optional_policy(`
@@ -79729,7 +79769,7 @@ index d40f750..c7e6040 100644
hostname_exec(xdm_t)
')
-@@ -537,28 +797,69 @@ optional_policy(`
+@@ -537,28 +798,69 @@ optional_policy(`
')
optional_policy(`
@@ -79808,7 +79848,7 @@ index d40f750..c7e6040 100644
')
optional_policy(`
-@@ -570,6 +871,14 @@ optional_policy(`
+@@ -570,6 +872,14 @@ optional_policy(`
')
optional_policy(`
@@ -79823,7 +79863,7 @@ index d40f750..c7e6040 100644
xfs_stream_connect(xdm_t)
')
-@@ -594,7 +903,8 @@ allow xserver_t input_xevent_t:x_event send;
+@@ -594,7 +904,8 @@ allow xserver_t input_xevent_t:x_event send;
# execheap needed until the X module loader is fixed.
# NVIDIA Needs execstack
@@ -79833,7 +79873,7 @@ index d40f750..c7e6040 100644
dontaudit xserver_t self:capability chown;
allow xserver_t self:process ~{ ptrace setcurrent setexec setfscreate setrlimit execmem execstack execheap };
allow xserver_t self:fd use;
-@@ -608,8 +918,15 @@ allow xserver_t self:unix_dgram_socket { create_socket_perms sendto };
+@@ -608,8 +919,15 @@ allow xserver_t self:unix_dgram_socket { create_socket_perms sendto };
allow xserver_t self:unix_stream_socket { create_stream_socket_perms connectto };
allow xserver_t self:tcp_socket create_stream_socket_perms;
allow xserver_t self:udp_socket create_socket_perms;
@@ -79849,7 +79889,7 @@ index d40f750..c7e6040 100644
manage_dirs_pattern(xserver_t, xserver_tmp_t, xserver_tmp_t)
manage_files_pattern(xserver_t, xserver_tmp_t, xserver_tmp_t)
manage_sock_files_pattern(xserver_t, xserver_tmp_t, xserver_tmp_t)
-@@ -628,12 +945,19 @@ manage_files_pattern(xserver_t, xkb_var_lib_t, xkb_var_lib_t)
+@@ -628,12 +946,19 @@ manage_files_pattern(xserver_t, xkb_var_lib_t, xkb_var_lib_t)
manage_lnk_files_pattern(xserver_t, xkb_var_lib_t, xkb_var_lib_t)
files_search_var_lib(xserver_t)
@@ -79871,7 +79911,7 @@ index d40f750..c7e6040 100644
kernel_read_system_state(xserver_t)
kernel_read_device_sysctls(xserver_t)
-@@ -641,12 +965,12 @@ kernel_read_modprobe_sysctls(xserver_t)
+@@ -641,12 +966,12 @@ kernel_read_modprobe_sysctls(xserver_t)
# Xorg wants to check if kernel is tainted
kernel_read_kernel_sysctls(xserver_t)
kernel_write_proc_files(xserver_t)
@@ -79885,7 +79925,7 @@ index d40f750..c7e6040 100644
corenet_all_recvfrom_netlabel(xserver_t)
corenet_tcp_sendrecv_generic_if(xserver_t)
corenet_udp_sendrecv_generic_if(xserver_t)
-@@ -667,23 +991,28 @@ dev_rw_apm_bios(xserver_t)
+@@ -667,23 +992,28 @@ dev_rw_apm_bios(xserver_t)
dev_rw_agp(xserver_t)
dev_rw_framebuffer(xserver_t)
dev_manage_dri_dev(xserver_t)
@@ -79917,7 +79957,7 @@ index d40f750..c7e6040 100644
# brought on by rhgb
files_search_mnt(xserver_t)
-@@ -694,8 +1023,13 @@ fs_getattr_xattr_fs(xserver_t)
+@@ -694,8 +1024,13 @@ fs_getattr_xattr_fs(xserver_t)
fs_search_nfs(xserver_t)
fs_search_auto_mountpoints(xserver_t)
fs_search_ramfs(xserver_t)
@@ -79931,7 +79971,7 @@ index d40f750..c7e6040 100644
selinux_validate_context(xserver_t)
selinux_compute_access_vector(xserver_t)
-@@ -708,8 +1042,6 @@ init_getpgid(xserver_t)
+@@ -708,8 +1043,6 @@ init_getpgid(xserver_t)
term_setattr_unallocated_ttys(xserver_t)
term_use_unallocated_ttys(xserver_t)
@@ -79940,7 +79980,7 @@ index d40f750..c7e6040 100644
locallogin_use_fds(xserver_t)
logging_send_syslog_msg(xserver_t)
-@@ -717,11 +1049,12 @@ logging_send_audit_msgs(xserver_t)
+@@ -717,11 +1050,12 @@ logging_send_audit_msgs(xserver_t)
miscfiles_read_localization(xserver_t)
miscfiles_read_fonts(xserver_t)
@@ -79955,7 +79995,7 @@ index d40f750..c7e6040 100644
userdom_search_user_home_dirs(xserver_t)
userdom_use_user_ttys(xserver_t)
-@@ -775,16 +1108,40 @@ optional_policy(`
+@@ -775,16 +1109,40 @@ optional_policy(`
')
optional_policy(`
@@ -79997,7 +80037,7 @@ index d40f750..c7e6040 100644
unconfined_domtrans(xserver_t)
')
-@@ -793,6 +1150,10 @@ optional_policy(`
+@@ -793,6 +1151,10 @@ optional_policy(`
')
optional_policy(`
@@ -80008,7 +80048,7 @@ index d40f750..c7e6040 100644
xfs_stream_connect(xserver_t)
')
-@@ -808,10 +1169,10 @@ allow xserver_t xdm_t:shm rw_shm_perms;
+@@ -808,10 +1170,10 @@ allow xserver_t xdm_t:shm rw_shm_perms;
# NB we do NOT allow xserver_t xdm_var_lib_t:dir, only access to an open
# handle of a file inside the dir!!!
@@ -80022,7 +80062,7 @@ index d40f750..c7e6040 100644
# Label pid and temporary files with derived types.
manage_files_pattern(xserver_t, xdm_tmp_t, xdm_tmp_t)
-@@ -819,7 +1180,7 @@ manage_lnk_files_pattern(xserver_t, xdm_tmp_t, xdm_tmp_t)
+@@ -819,7 +1181,7 @@ manage_lnk_files_pattern(xserver_t, xdm_tmp_t, xdm_tmp_t)
manage_sock_files_pattern(xserver_t, xdm_tmp_t, xdm_tmp_t)
# Run xkbcomp.
@@ -80031,7 +80071,7 @@ index d40f750..c7e6040 100644
can_exec(xserver_t, xkb_var_lib_t)
# VNC v4 module in X server
-@@ -832,26 +1193,21 @@ init_use_fds(xserver_t)
+@@ -832,26 +1194,21 @@ init_use_fds(xserver_t)
# to read ROLE_home_t - examine this in more detail
# (xauth?)
userdom_read_user_home_content_files(xserver_t)
@@ -80066,7 +80106,7 @@ index d40f750..c7e6040 100644
')
optional_policy(`
-@@ -859,6 +1215,10 @@ optional_policy(`
+@@ -859,6 +1216,10 @@ optional_policy(`
rhgb_rw_tmpfs_files(xserver_t)
')
@@ -80077,7 +80117,7 @@ index d40f750..c7e6040 100644
########################################
#
# Rules common to all X window domains
-@@ -902,7 +1262,7 @@ allow x_domain xproperty_t:x_property { getattr create read write append destroy
+@@ -902,7 +1263,7 @@ allow x_domain xproperty_t:x_property { getattr create read write append destroy
allow x_domain root_xdrawable_t:x_drawable { getattr setattr list_child add_child remove_child send receive hide show };
# operations allowed on my windows
allow x_domain self:x_drawable { create destroy getattr setattr read write show hide list_child add_child remove_child manage send receive };
@@ -80086,7 +80126,7 @@ index d40f750..c7e6040 100644
# operations allowed on all windows
allow x_domain x_domain:x_drawable { getattr get_property set_property remove_child };
-@@ -956,11 +1316,31 @@ allow x_domain self:x_resource { read write };
+@@ -956,11 +1317,31 @@ allow x_domain self:x_resource { read write };
# can mess with the screensaver
allow x_domain xserver_t:x_screen { getattr saver_getattr };
@@ -80118,7 +80158,7 @@ index d40f750..c7e6040 100644
tunable_policy(`! xserver_object_manager',`
# should be xserver_unconfined(x_domain),
# but typeattribute doesnt work in conditionals
-@@ -982,18 +1362,44 @@ tunable_policy(`! xserver_object_manager',`
+@@ -982,18 +1363,44 @@ tunable_policy(`! xserver_object_manager',`
allow x_domain xevent_type:{ x_event x_synthetic_event } *;
')
@@ -80375,7 +80415,7 @@ index 28ad538..47fdb65 100644
-/var/run/user(/.*)? gen_context(system_u:object_r:var_auth_t,s0)
/var/(db|lib|adm)/sudo(/.*)? gen_context(system_u:object_r:pam_var_run_t,s0)
diff --git a/policy/modules/system/authlogin.if b/policy/modules/system/authlogin.if
-index f416ce9..25def3e 100644
+index f416ce9..1409940 100644
--- a/policy/modules/system/authlogin.if
+++ b/policy/modules/system/authlogin.if
@@ -23,11 +23,17 @@ interface(`auth_role',`
@@ -80500,12 +80540,14 @@ index f416ce9..25def3e 100644
auth_use_pam($1)
init_rw_utmp($1)
-@@ -155,9 +198,89 @@ interface(`auth_login_pgm_domain',`
+@@ -155,9 +198,91 @@ interface(`auth_login_pgm_domain',`
seutil_read_config($1)
seutil_read_default_contexts($1)
- tunable_policy(`allow_polyinstantiation',`
- files_polyinstantiate_all($1)
++ systemd_login_read_pid_files($1)
++
+ userdom_set_rlimitnh($1)
+ userdom_read_user_home_content_symlinks($1)
+ userdom_delete_user_tmp_files($1)
@@ -80592,7 +80634,7 @@ index f416ce9..25def3e 100644
')
########################################
-@@ -231,6 +354,25 @@ interface(`auth_domtrans_login_program',`
+@@ -231,6 +356,25 @@ interface(`auth_domtrans_login_program',`
########################################
##