components/trousers/patches/30-tpm-failover.patch
author Dan Anderson <dan.anderson@oracle.com>
Sat, 11 Apr 2015 08:10:25 -0700
branchs11u2-sru
changeset 4105 3ad584cdc4c9
permissions -rw-r--r--
19280108 Trousers support for TPM Failover for SPARC M7 systems
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4105
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     1
#
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     2
# 30-tpm-failover.patch
3ad584cdc4c9 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
3ad584cdc4c9 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.
3ad584cdc4c9 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.
3ad584cdc4c9 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.
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
     7
#
3ad584cdc4c9 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
3ad584cdc4c9 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
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    10
@@ -26,6 +26,16 @@
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    11
 #include "tcsps.h"
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    12
 #include "req_mgr.h"
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    13
 
3ad584cdc4c9 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)
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    15
+#include <signal.h>
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    16
+#include <fcntl.h>
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    17
+#include <sys/paths.h>
3ad584cdc4c9 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:"
3ad584cdc4c9 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"
3ad584cdc4c9 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"
3ad584cdc4c9 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"
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    22
+#endif	/* SOLARIS && __sparcv9 */
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    23
+
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    24
 
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    25
 TSS_RESULT
3ad584cdc4c9 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)
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    27
@@ -338,6 +348,42 @@
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    28
         return ret;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    29
 }
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    30
 
3ad584cdc4c9 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)
3ad584cdc4c9 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 */
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    33
+static void
3ad584cdc4c9 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)
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    35
+{
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    36
+	int	fd;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    37
+	pid_t	pid = -1;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    38
+	char	pid_string[256] = "";
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    39
+
3ad584cdc4c9 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. */
3ad584cdc4c9 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) {
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    42
+		return;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    43
+	}
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    44
+
3ad584cdc4c9 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 */
3ad584cdc4c9 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) {
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    47
+		return;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    48
+	}
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    49
+
3ad584cdc4c9 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) {
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    51
+		(void) close(fd);
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    52
+		return;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    53
+	}
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    54
+
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    55
+	(void) close(fd);
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    56
+
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    57
+	pid = atoll(pid_string);
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    58
+	if (pid <= 0) {
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    59
+		return;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    60
+	}
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    61
+
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    62
+	/* Signal tpmfod */
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    63
+	(void) kill(pid, SIGUSR1);
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    64
+}
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    65
+#endif	/* SOLARIS && __sparcv9 */
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    66
+
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    67
 TSS_RESULT
3ad584cdc4c9 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,
3ad584cdc4c9 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)
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    70
@@ -363,5 +409,10 @@
3ad584cdc4c9 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);
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    72
 
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    73
         put_file(fd);
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    74
+
3ad584cdc4c9 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)
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    76
+	notify_system_ps_change();
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    77
+#endif	/* SOLARIS && __sparcv9 */
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    78
+
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    79
         return TSS_SUCCESS;
3ad584cdc4c9 19280108 Trousers support for TPM Failover for SPARC M7 systems
Dan Anderson <dan.anderson@oracle.com>
parents:
diff changeset
    80
 }