From: sangwan.kwon Date: Mon, 9 Jan 2017 02:25:52 +0000 (+0900) Subject: Suppress SIGPIPE for prevent abort X-Git-Tag: accepted/tizen/unified/20170413.161056~20 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fa83f9e9f64c155ae2fb7849f5a79862537dc8dc;p=platform%2Fcore%2Fsecurity%2Fcert-svc.git Suppress SIGPIPE for prevent abort [PROBLEM] * send() makes unexpectedly abort when SIG_PIPE occurred. [SOLUTION] * Suppress SIGPIPE by using MSG_NOSIGNAL params. * And check pipe error(EPIPE) by errno. Change-Id: I9acaba8418312dff3d1b7fbbeded4045c400b794 Signed-off-by: sangwan.kwon --- diff --git a/src/server/src/cert-server-main.c b/src/server/src/cert-server-main.c index 526e7f2..a06515a 100644 --- a/src/server/src/cert-server-main.c +++ b/src/server/src/cert-server-main.c @@ -190,7 +190,8 @@ void CertSvcServerComm(void) recv_data.gname, send_data.dataBlock); send_data.dataBlockLen = strlen(send_data.dataBlock); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -199,7 +200,8 @@ void CertSvcServerComm(void) recv_data.gname, send_data.dataBlock); send_data.dataBlockLen = strlen(send_data.dataBlock); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -211,7 +213,8 @@ void CertSvcServerComm(void) if (send_data.result == CERTSVC_SUCCESS) send_data.result = update_ca_certificate_file(NULL); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -220,7 +223,8 @@ void CertSvcServerComm(void) recv_data.storeType, recv_data.gname, &send_data.certStatus); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -234,7 +238,8 @@ void CertSvcServerComm(void) if (send_data.result == CERTSVC_SUCCESS) send_data.result = update_ca_certificate_file(NULL); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -243,7 +248,8 @@ void CertSvcServerComm(void) recv_data.storeType, recv_data.gname, &send_data.isAliasUnique); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -261,7 +267,8 @@ void CertSvcServerComm(void) recv_data.certType == P12_TRUSTED)) send_data.result = update_ca_certificate_file(recv_data.dataBlock); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -275,10 +282,12 @@ void CertSvcServerComm(void) &certListBuffer, &bufferLen, &send_data.certCount); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); if (bufferLen > 0) - result = send(client_sockfd, certListBuffer, bufferLen, 0); + result = send(client_sockfd, certListBuffer, + bufferLen, MSG_NOSIGNAL); break; } @@ -288,7 +297,8 @@ void CertSvcServerComm(void) recv_data.storeType, recv_data.gname, send_data.common_name); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); break; } @@ -299,11 +309,12 @@ void CertSvcServerComm(void) &certBlockBuffer, &blockBufferLen, &send_data.certBlockCount); - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); if (blockBufferLen > 0) - result = send(client_sockfd, certBlockBuffer, blockBufferLen, 0); - + result = send(client_sockfd, certBlockBuffer, + blockBufferLen, MSG_NOSIGNAL); break; } @@ -323,7 +334,8 @@ Error_close_exit: free(certBlockBuffer); if (client_sockfd >= 0) { - result = send(client_sockfd, (char *)&send_data, sizeof(send_data), 0); + result = send(client_sockfd, (char *)&send_data, + sizeof(send_data), MSG_NOSIGNAL); if (result <= 0) SLOGE("send failed :%d, errno %d try once", result, errno);