components/trousers/patches/tspi_rpc_tcstp_rpc.c.patch
author Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
Sat, 20 Oct 2012 00:06:08 -0700
branchs11-sru
changeset 2391 811524a2620b
child 5941 db8aa9865e9f
permissions -rw-r--r--
7123028 Problem with crypto/tss 7041927 tcsd and libtspi should not use TCP/IP sockets 7002966 libtspi can segv in .fini section 6896514 tss code doesn't do correct privilege check when using mlock 7162897 tcsd daemon goes into maintenance mode after reboot
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2391
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     1
--- src/tspi/rpc/tcstp/rpc.c	2010-03-11 12:26:51.000000000 -0800
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     2
+++ src/tspi/rpc/tcstp/rpc.c	2012-04-11 14:28:08.181630000 -0700
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     3
@@ -345,41 +345,67 @@
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     4
 	BYTE *buffer;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     5
 	TSS_RESULT result;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     6
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     7
-	struct sockaddr_in addr;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     8
-	struct hostent *hEnt = NULL;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
     9
+	if (get_port() == 0) { /* use UNIX Domain socket */
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    10
+		struct sockaddr_un addr;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    11
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    12
-	sd = socket(PF_INET, SOCK_STREAM, 0);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    13
-	if (sd == -1) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    14
-		LogError("socket: %s", strerror(errno));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    15
-		result = TSPERR(TSS_E_COMM_FAILURE);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    16
-		goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    17
-	}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    18
-
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    19
-	memset(&addr, 0, sizeof(addr));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    20
-	addr.sin_family = AF_INET;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    21
-	addr.sin_port = htons(get_port());
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    22
+		sd = socket(PF_UNIX, SOCK_STREAM, 0);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    23
+		if (sd == -1) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    24
+			LogError("socket(PF_UNIX): %s", strerror(errno));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    25
+			result = TSPERR(TSS_E_COMM_FAILURE);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    26
+			goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    27
+		}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    28
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    29
-	LogDebug("Sending TSP packet to host %s.", hte->hostname);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    30
+		memset(&addr, 0, sizeof(addr));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    31
+		addr.sun_family = AF_UNIX;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    32
+		strncpy(addr.sun_path, TCSD_DEFAULT_SOCKET,
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    33
+			sizeof(addr.sun_path));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    34
+
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    35
+		LogDebug("Connecting to UNIX Domain socket %s",
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    36
+			TCSD_DEFAULT_SOCKET);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    37
+
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    38
+		if (connect(sd, (struct sockaddr *) &addr, sizeof (addr))) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    39
+			LogError("connect: %s", strerror(errno));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    40
+			result = TSPERR(TSS_E_COMM_FAILURE);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    41
+			goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    42
+		}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    43
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    44
-	/* try to resolve by hostname first */
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    45
-	hEnt = gethostbyname((char *)hte->hostname);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    46
-	if (hEnt == NULL) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    47
-		/* if by hostname fails, try by dot notation */
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    48
-		if (inet_aton((char *)hte->hostname, &addr.sin_addr) == 0) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    49
-			LogError("hostname %s does not resolve to a valid address.", hte->hostname);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    50
-			result = TSPERR(TSS_E_CONNECTION_FAILED);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    51
+	} else { /* use TCP socket */
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    52
+		struct sockaddr_in addr;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    53
+		struct hostent *hEnt = NULL;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    54
+
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    55
+		sd = socket(PF_INET, SOCK_STREAM, 0);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    56
+		if (sd == -1) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    57
+			LogError("socket: %s", strerror(errno));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    58
+			result = TSPERR(TSS_E_COMM_FAILURE);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    59
 			goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    60
 		}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    61
-	} else {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    62
-		memcpy(&addr.sin_addr, hEnt->h_addr_list[0], 4);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    63
-	}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    64
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    65
-	LogDebug("Connecting to %s", inet_ntoa(addr.sin_addr));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    66
+		memset(&addr, 0, sizeof(addr));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    67
+		addr.sin_family = AF_INET;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    68
+		addr.sin_port = htons(get_port());
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    69
+
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    70
+		LogDebug("Sending TSP packet to host %s.", hte->hostname);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    71
+
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    72
+		/* try to resolve by hostname first */
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    73
+		hEnt = gethostbyname((char *)hte->hostname);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    74
+		if (hEnt == NULL) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    75
+			/* if by hostname fails, try by dot notation */
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    76
+			if (inet_aton((char *)hte->hostname, &addr.sin_addr) == 0) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    77
+				LogError("hostname %s does not resolve to a valid address.", hte->hostname);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    78
+				result = TSPERR(TSS_E_CONNECTION_FAILED);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    79
+				goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    80
+			}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    81
+		} else {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    82
+			memcpy(&addr.sin_addr, hEnt->h_addr_list[0], 4);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    83
+		}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    84
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    85
-	if (connect(sd, (struct sockaddr *) &addr, sizeof (addr))) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    86
-		LogError("connect: %s", strerror(errno));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    87
-		result = TSPERR(TSS_E_COMM_FAILURE);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    88
-		goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    89
+		LogDebug("Connecting to %s", inet_ntoa(addr.sin_addr));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    90
+
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    91
+		if (connect(sd, (struct sockaddr *) &addr, sizeof (addr))) {
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    92
+			LogError("connect: %s", strerror(errno));
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    93
+			result = TSPERR(TSS_E_COMM_FAILURE);
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    94
+			goto err_exit;
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    95
+		}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    96
 	}
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    97
 
811524a2620b 7123028 Problem with crypto/tss
Tsu-Phong Wu <Tsu-Phong.Wu@oracle.COM>
parents:
diff changeset
    98
 	if (send_to_socket(sd, hte->comm.buf, hte->comm.hdr.packet_size) < 0) {