diff --git a/modules-mls.conf b/modules-mls.conf
index 2ecea15..ec38586 100644
--- a/modules-mls.conf
+++ b/modules-mls.conf
@@ -1525,6 +1525,13 @@ sysstat = module
tcpd = module
# Layer: services
+# Module: tcsd
+#
+# tcsd - daemon that manages Trusted Computing resources
+#
+tcsd = module
+
+# Layer: services
# Module: tgtd
#
# Linux Target Framework Daemon.
diff --git a/modules-targeted.conf b/modules-targeted.conf
index 44b5b28..6ed801c 100644
--- a/modules-targeted.conf
+++ b/modules-targeted.conf
@@ -1742,6 +1742,13 @@ sysstat = module
tcpd = module
# Layer: services
+# Module: tcsd
+#
+# tcsd - daemon that manages Trusted Computing resources
+#
+tcsd = module
+
+# Layer: services
# Module: tgtd
#
# Linux Target Framework Daemon.
diff --git a/policy-F15.patch b/policy-F15.patch
index eac1b70..ed163bf 100644
--- a/policy-F15.patch
+++ b/policy-F15.patch
@@ -8869,7 +8869,7 @@ index 5a07a43..e97e47f 100644
##
##
diff --git a/policy/modules/kernel/corenetwork.te.in b/policy/modules/kernel/corenetwork.te.in
-index f12e087..71e46ab 100644
+index f12e087..791a227 100644
--- a/policy/modules/kernel/corenetwork.te.in
+++ b/policy/modules/kernel/corenetwork.te.in
@@ -16,6 +16,7 @@ attribute rpc_port_type;
@@ -9023,7 +9023,7 @@ index f12e087..71e46ab 100644
network_port(printer, tcp,515,s0)
network_port(ptal, tcp,5703,s0)
network_port(pulseaudio, tcp,4713,s0)
-@@ -177,43 +213,49 @@ network_port(ricci, tcp,11111,s0, udp,11111,s0)
+@@ -177,25 +213,30 @@ network_port(ricci, tcp,11111,s0, udp,11111,s0)
network_port(ricci_modcluster, tcp,16851,s0, udp,16851,s0)
network_port(rlogind, tcp,513,s0)
network_port(rndc, tcp,953,s0)
@@ -9054,12 +9054,11 @@ index f12e087..71e46ab 100644
network_port(swat, tcp,901,s0)
+network_port(sype, tcp,9911,s0, udp,9911,s0)
network_port(syslogd, udp,514,s0)
++network_port(tcs, tcp, 30003, s0)
network_port(telnetd, tcp,23,s0)
network_port(tftp, udp,69,s0)
network_port(tor, tcp, 6969, s0, tcp,9001,s0, tcp,9030,s0, tcp,9050,s0, tcp,9051,s0)
- network_port(traceroute, udp,64000-64010,s0)
- network_port(transproxy, tcp,8081,s0)
-+network_port(tscd, tcp,30003,s0)
+@@ -204,16 +245,17 @@ network_port(transproxy, tcp,8081,s0)
network_port(ups, tcp,3493,s0)
type utcpserver_port_t, port_type; dnl network_port(utcpserver) # no defined portcon
network_port(uucpd, tcp,540,s0)
@@ -9125,7 +9124,7 @@ index 3b2da10..7c29e17 100644
+#
+/sys(/.*)? gen_context(system_u:object_r:sysfs_t,s0)
diff --git a/policy/modules/kernel/devices.if b/policy/modules/kernel/devices.if
-index 15a7bef..6d68113 100644
+index 15a7bef..eddb8dc 100644
--- a/policy/modules/kernel/devices.if
+++ b/policy/modules/kernel/devices.if
@@ -146,8 +146,8 @@ interface(`dev_relabel_all_dev_nodes',`
@@ -9407,7 +9406,7 @@ index 15a7bef..6d68113 100644
## Get the attributes of sysfs directories.
##
##
-@@ -3773,6 +3935,42 @@ interface(`dev_rw_sysfs',`
+@@ -3773,6 +3935,60 @@ interface(`dev_rw_sysfs',`
########################################
##
@@ -9447,10 +9446,28 @@ index 15a7bef..6d68113 100644
+
+########################################
+##
++## Read and write the TPM device.
++##
++##
++##
++## Domain allowed access.
++##
++##
++#
++interface(`dev_rw_tpm',`
++ gen_require(`
++ type device_t, tpm_device_t;
++ ')
++
++ rw_chr_files_pattern($1, device_t, tpm_device_t)
++')
++
++########################################
++##
## Read from pseudo random number generator devices (e.g., /dev/urandom).
##
##
-@@ -3942,6 +4140,24 @@ interface(`dev_read_usbmon_dev',`
+@@ -3942,6 +4158,24 @@ interface(`dev_read_usbmon_dev',`
########################################
##
@@ -9475,7 +9492,7 @@ index 15a7bef..6d68113 100644
## Mount a usbfs filesystem.
##
##
-@@ -4252,11 +4468,10 @@ interface(`dev_write_video_dev',`
+@@ -4252,11 +4486,10 @@ interface(`dev_write_video_dev',`
#
interface(`dev_rw_vhost',`
gen_require(`
@@ -38454,6 +38471,234 @@ index 7038b55..4e84f23 100644
type tcpd_tmp_t;
files_tmp_file(tcpd_tmp_t)
+diff --git a/policy/modules/services/tcsd.fc b/policy/modules/services/tcsd.fc
+new file mode 100644
+index 0000000..7fdda14
+--- /dev/null
++++ b/policy/modules/services/tcsd.fc
+@@ -0,0 +1,6 @@
++/etc/rc\.d/init\.d/tcsd -- gen_context(system_u:object_r:tcsd_initrc_exec_t,s0)
++
++/usr/sbin/tcsd -- gen_context(system_u:object_r:tcsd_exec_t,s0)
++
++/var/lib/tpm(/.*)? gen_context(system_u:object_r:tcsd_var_lib_t,s0)
++
+diff --git a/policy/modules/services/tcsd.if b/policy/modules/services/tcsd.if
+new file mode 100644
+index 0000000..41ebccf
+--- /dev/null
++++ b/policy/modules/services/tcsd.if
+@@ -0,0 +1,153 @@
++## policy for tcsd
++
++########################################
++##
++## Execute a domain transition to run tcsd.
++##
++##
++##
++## Domain allowed access.
++##
++##
++#
++interface(`tcsd_domtrans',`
++ gen_require(`
++ type tcsd_t, tcsd_exec_t;
++ ')
++
++ domtrans_pattern($1, tcsd_exec_t, tcsd_t)
++')
++
++
++########################################
++##
++## Execute tcsd server in the tcsd domain.
++##
++##
++##
++## The type of the process performing this action.
++##
++##
++#
++interface(`tcsd_initrc_domtrans',`
++ gen_require(`
++ type tcsd_initrc_exec_t;
++ ')
++
++ init_labeled_script_domtrans($1, tcsd_initrc_exec_t)
++')
++
++########################################
++##
++## Search tcsd lib directories.
++##
++##
++##
++## Domain allowed access.
++##
++##
++#
++interface(`tcsd_search_lib',`
++ gen_require(`
++ type tcsd_var_lib_t;
++ ')
++
++ allow $1 tcsd_var_lib_t:dir search_dir_perms;
++ files_search_var_lib($1)
++')
++
++########################################
++##
++## Read tcsd lib files.
++##
++##
++##
++## Domain allowed access.
++##
++##
++#
++interface(`tcsd_read_lib_files',`
++ gen_require(`
++ type tcsd_var_lib_t;
++ ')
++
++ files_search_var_lib($1)
++ read_files_pattern($1, tcsd_var_lib_t, tcsd_var_lib_t)
++')
++
++########################################
++##
++## Create, read, write, and delete
++## tcsd lib files.
++##
++##
++##
++## Domain allowed access.
++##
++##
++#
++interface(`tcsd_manage_lib_files',`
++ gen_require(`
++ type tcsd_var_lib_t;
++ ')
++
++ files_search_var_lib($1)
++ manage_files_pattern($1, tcsd_var_lib_t, tcsd_var_lib_t)
++')
++
++########################################
++##
++## Manage tcsd lib dirs files.
++##
++##
++##
++## Domain allowed access.
++##
++##
++#
++interface(`tcsd_manage_lib_dirs',`
++ gen_require(`
++ type tcsd_var_lib_t;
++ ')
++
++ files_search_var_lib($1)
++ manage_dirs_pattern($1, tcsd_var_lib_t, tcsd_var_lib_t)
++')
++
++
++########################################
++##
++## All of the rules required to administrate
++## an tcsd environment
++##
++##
++##
++## Domain allowed access.
++##
++##
++##
++##
++## Role allowed access.
++##
++##
++##
++#
++interface(`tcsd_admin',`
++ gen_require(`
++ type tcsd_t;
++ type tcsd_initrc_exec_t;
++ type tcsd_var_lib_t;
++ ')
++
++ allow $1 tcsd_t:process { ptrace signal_perms };
++ ps_process_pattern($1, tcsd_t)
++
++ tcsd_initrc_domtrans($1)
++ domain_system_change_exemption($1)
++ role_transition $2 tcsd_initrc_exec_t system_r;
++ allow $2 system_r;
++
++ files_search_var_lib($1)
++ admin_pattern($1, tcsd_var_lib_t)
++
++')
+diff --git a/policy/modules/services/tcsd.te b/policy/modules/services/tcsd.te
+new file mode 100644
+index 0000000..7b74540
+--- /dev/null
++++ b/policy/modules/services/tcsd.te
+@@ -0,0 +1,51 @@
++policy_module(tcsd, 1.0.0)
++
++########################################
++#
++# Declarations
++#
++
++type tcsd_t;
++type tcsd_exec_t;
++init_daemon_domain(tcsd_t, tcsd_exec_t)
++
++permissive tcsd_t;
++
++type tcsd_initrc_exec_t;
++init_script_file(tcsd_initrc_exec_t)
++
++type tcsd_var_lib_t;
++files_type(tcsd_var_lib_t)
++
++########################################
++#
++# tcsd local policy
++#
++
++allow tcsd_t self:capability { dac_override setuid };
++allow tcsd_t self:process { signal sigkill };
++allow tcsd_t self:tcp_socket create_stream_socket_perms;
++
++# Access /dev/tpm0.
++dev_rw_tpm(tcsd_t)
++
++manage_dirs_pattern(tcsd_t,tcsd_var_lib_t,tcsd_var_lib_t)
++manage_files_pattern(tcsd_t,tcsd_var_lib_t,tcsd_var_lib_t)
++files_var_lib_filetrans(tcsd_t,tcsd_var_lib_t,{ file dir })
++
++corenet_all_recvfrom_unlabeled(tcsd_t)
++corenet_tcp_bind_generic_node(tcsd_t)
++corenet_tcp_bind_tcs_port(tcsd_t)
++
++dev_read_urand(tcsd_t)
++
++files_read_etc_files(tcsd_t)
++files_read_usr_files(tcsd_t)
++
++auth_use_nsswitch(tcsd_t)
++
++logging_send_syslog_msg(tcsd_t)
++
++miscfiles_read_localization(tcsd_t)
++
++sysnet_dns_name_resolve(tcsd_t)
diff --git a/policy/modules/services/telnet.if b/policy/modules/services/telnet.if
index 58e7ec0..cf4cc85 100644
--- a/policy/modules/services/telnet.if
diff --git a/selinux-policy.spec b/selinux-policy.spec
index f4c17bd..fb7a949 100644
--- a/selinux-policy.spec
+++ b/selinux-policy.spec
@@ -21,7 +21,7 @@
Summary: SELinux policy configuration
Name: selinux-policy
Version: 3.9.13
-Release: 7%{?dist}
+Release: 8%{?dist}
License: GPLv2+
Group: System Environment/Base
Source: serefpolicy-%{version}.tgz
@@ -472,6 +472,9 @@ exit 0
%endif
%changelog
+* Tue Feb 1 2011 Dan Walsh 3.9.13-8
+- Add tcsd policy
+
* Tue Feb 1 2011 Miroslav Grepl 3.9.13-7
- ricci_modclusterd_t needs to bind to rpc ports 500-1023
- Allow dbus to use setrlimit to increase resoueces