components/trousers/patches/30-tpm-failover.patch
author Dan Anderson <dan.anderson@oracle.com>
Mon, 02 Mar 2015 10:02:56 -0800
changeset 3879 f0286c1c2714
permissions -rw-r--r--
19280108 Trousers support for TPM Failover for SPARC M7 systems
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3879
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     1
#
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     2
# 30-tpm-failover.patch
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     3
# This patch c implements the tcsd part of
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     4
# Solaris- and SPARC-specific TPM failover.
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     5
# It is not suitable for upstream use.
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     6
# This change was implemented in-house.
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     7
#
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     8
--- src/tcs/tcs_key_ps.c.	2010-06-09 13:20:44.000000000 -0700
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     9
+++ src/tcs/tcs_key_ps.c	2014-07-23 16:48:40.316448661 -0700
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    10
@@ -26,6 +26,16 @@
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    11
 #include "tcsps.h"
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    12
 #include "req_mgr.h"
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    13
 
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    14
+#if defined(SOLARIS) && defined(__sparcv9)
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    15
+#include <signal.h>
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    16
+#include <fcntl.h>
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    17
+#include <sys/paths.h>
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    18
+#define	FILE_PREFIX		"application-security-tcsd:"
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    19
+#define	PATH_TPMFOD_PID		_PATH_SYSVOL "/" FILE_PREFIX "tpmfod.pid"
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    20
+#define	PATH_ADMIN_PIN		_PATH_SYSVOL "/" FILE_PREFIX "admin.pin"
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    21
+#define	PATH_BACKUP_PIN		_PATH_SYSVOL "/" FILE_PREFIX "backup.pin"
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    22
+#endif	/* SOLARIS && __sparcv9 */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    23
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    24
 
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    25
 TSS_RESULT
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    26
 ps_init_disk_cache(void)
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    27
@@ -338,6 +348,42 @@
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    28
         return ret;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    29
 }
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    30
 
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    31
+#if defined(SOLARIS) && defined(__sparcv9)
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    32
+/* Notify the tpmfod when the System keystore (persistent storage) changes */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    33
+static void
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    34
+notify_system_ps_change(void)
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    35
+{
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    36
+	int	fd;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    37
+	pid_t	pid = -1;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    38
+	char	pid_string[256] = "";
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    39
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    40
+	/* No failover support if no tpmfod daemon. */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    41
+	if (access(PATH_TPMFOD_PID, R_OK) < 0) {
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    42
+		return;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    43
+	}
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    44
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    45
+	/* Read pid string from file and convert to integer */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    46
+	if ((fd = open(PATH_TPMFOD_PID, O_RDONLY)) == -1) {
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    47
+		return;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    48
+	}
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    49
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    50
+	if (read(fd, pid_string, strlen(pid_string)) < 0) {
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    51
+		(void) close(fd);
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    52
+		return;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    53
+	}
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    54
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    55
+	(void) close(fd);
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    56
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    57
+	pid = atoll(pid_string);
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    58
+	if (pid <= 0) {
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    59
+		return;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    60
+	}
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    61
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    62
+	/* Signal tpmfod */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    63
+	(void) kill(pid, SIGUSR1);
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    64
+}
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    65
+#endif	/* SOLARIS && __sparcv9 */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    66
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    67
 TSS_RESULT
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    68
 ps_write_key(TSS_UUID *uuid, TSS_UUID *parent_uuid, BYTE *vendor_data,
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    69
 	     UINT32 vendor_size, BYTE *blob, UINT32 blob_size)
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    70
@@ -363,5 +409,10 @@
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    71
 			      vendor_size, blob, short_blob_size);
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    72
 
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    73
         put_file(fd);
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    74
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    75
+#if defined(SOLARIS) && defined(__sparcv9)
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    76
+	notify_system_ps_change();
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    77
+#endif	/* SOLARIS && __sparcv9 */
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    78
+
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    79
         return TSS_SUCCESS;
f0286c1c2714 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    80
 }