diff --git a/examples/benchmark/tls_bench.c b/examples/benchmark/tls_bench.c index b9b7d8265..38a2b5950 100644 --- a/examples/benchmark/tls_bench.c +++ b/examples/benchmark/tls_bench.c @@ -393,7 +393,7 @@ int DoneHandShake = 0; static double gettime_secs(int reset) { struct timeval tv; - gettimeofday(&tv, 0); + LIBCALL_CHECK_RET(gettimeofday(&tv, 0)); (void)reset; return (double)tv.tv_sec + (double)tv.tv_usec / 1000000; @@ -404,12 +404,12 @@ static double gettime_secs(int reset) /* server send callback */ static int ServerMemSend(info_t* info, char* buf, int sz) { - pthread_mutex_lock(&info->to_client.mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&info->to_client.mutex)); #ifndef BENCH_USE_NONBLOCK /* check for overflow */ if (info->to_client.write_idx + sz > MEM_BUFFER_SZ) { - pthread_mutex_unlock(&info->to_client.mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->to_client.mutex)); fprintf(stderr, "ServerMemSend overflow\n"); return -1; } @@ -423,8 +423,8 @@ static int ServerMemSend(info_t* info, char* buf, int sz) info->to_client.write_idx += sz; info->to_client.write_bytes += sz; - pthread_cond_signal(&info->to_client.cond); - pthread_mutex_unlock(&info->to_client.mutex); + PTHREAD_CHECK_RET(pthread_cond_signal(&info->to_client.cond)); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->to_client.mutex)); #ifdef BENCH_USE_NONBLOCK if (sz == 0) { @@ -437,12 +437,13 @@ static int ServerMemSend(info_t* info, char* buf, int sz) /* server recv callback */ static int ServerMemRecv(info_t* info, char* buf, int sz) { - pthread_mutex_lock(&info->to_server.mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&info->to_server.mutex)); #ifndef BENCH_USE_NONBLOCK while (info->to_server.write_idx - info->to_server.read_idx < sz && !info->to_client.done) { - pthread_cond_wait(&info->to_server.cond, &info->to_server.mutex); + PTHREAD_CHECK_RET(pthread_cond_wait(&info->to_server.cond, + &info->to_server.mutex)); } #else if (info->to_server.write_idx - info->to_server.read_idx < sz) { @@ -460,7 +461,7 @@ static int ServerMemRecv(info_t* info, char* buf, int sz) info->to_server.write_bytes = info->to_server.write_idx = 0; } - pthread_mutex_unlock(&info->to_server.mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->to_server.mutex)); if (info->to_client.done != 0) { return -1; @@ -477,14 +478,14 @@ static int ServerMemRecv(info_t* info, char* buf, int sz) /* client send callback */ static int ClientMemSend(info_t* info, char* buf, int sz) { - pthread_mutex_lock(&info->to_server.mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&info->to_server.mutex)); #ifndef BENCH_USE_NONBLOCK /* check for overflow */ if (info->to_server.write_idx + sz > MEM_BUFFER_SZ) { fprintf(stderr, "ClientMemSend overflow %d %d %d\n", info->to_server.write_idx, sz, MEM_BUFFER_SZ); - pthread_mutex_unlock(&info->to_server.mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->to_server.mutex)); return -1; } #else @@ -497,8 +498,8 @@ static int ClientMemSend(info_t* info, char* buf, int sz) info->to_server.write_idx += sz; info->to_server.write_bytes += sz; - pthread_cond_signal(&info->to_server.cond); - pthread_mutex_unlock(&info->to_server.mutex); + PTHREAD_CHECK_RET(pthread_cond_signal(&info->to_server.cond)); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->to_server.mutex)); #ifdef BENCH_USE_NONBLOCK if (sz == 0) { @@ -511,12 +512,13 @@ static int ClientMemSend(info_t* info, char* buf, int sz) /* client recv callback */ static int ClientMemRecv(info_t* info, char* buf, int sz) { - pthread_mutex_lock(&info->to_client.mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&info->to_client.mutex)); #ifndef BENCH_USE_NONBLOCK while (info->to_client.write_idx - info->to_client.read_idx < sz && !info->to_server.done) { - pthread_cond_wait(&info->to_client.cond, &info->to_client.mutex); + PTHREAD_CHECK_RET(pthread_cond_wait(&info->to_client.cond, + &info->to_client.mutex)); } #else if (info->to_client.write_idx - info->to_client.read_idx < sz) { @@ -534,7 +536,7 @@ static int ClientMemRecv(info_t* info, char* buf, int sz) info->to_client.write_bytes = info->to_client.write_idx = 0; } - pthread_mutex_unlock(&info->to_client.mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->to_client.mutex)); if (info->to_server.done != 0) { return -1; @@ -1056,13 +1058,14 @@ static int bench_tls_client(info_t* info) #if defined(HAVE_PTHREAD) && defined(WOLFSSL_DTLS) /* synchronize with server */ if (info->doDTLS && !info->clientOrserverOnly) { - pthread_mutex_lock(&info->dtls_mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&info->dtls_mutex)); if (info->serverReady != 1) { - pthread_cond_wait(&info->dtls_cond, &info->dtls_mutex); + PTHREAD_CHECK_RET(pthread_cond_wait(&info->dtls_cond, + &info->dtls_mutex)); } /* for next loop */ info->serverReady = 0; - pthread_mutex_unlock(&info->dtls_mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->dtls_mutex)); } #endif /* perform connect */ @@ -1204,7 +1207,7 @@ static void* client_thread(void* args) ret = bench_tls_client(info); - pthread_cond_signal(&info->to_server.cond); + PTHREAD_CHECK_RET(pthread_cond_signal(&info->to_server.cond)); info->to_client.done = 1; info->client.ret = ret; @@ -1294,10 +1297,10 @@ static int SocketWaitClient(info_t* info) if (info->doDTLS) { #ifdef HAVE_PTHREAD if (!info->clientOrserverOnly) { - pthread_mutex_lock(&info->dtls_mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&info->dtls_mutex)); info->serverReady = 1; - pthread_cond_signal(&info->dtls_cond); - pthread_mutex_unlock(&info->dtls_mutex); + PTHREAD_CHECK_RET(pthread_cond_signal(&info->dtls_cond)); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&info->dtls_mutex)); } #endif connd = (int)recvfrom(info->listenFd, (char *)msg, sizeof(msg), @@ -1664,7 +1667,7 @@ static void* server_thread(void* args) } } - pthread_cond_signal(&info->to_client.cond); + PTHREAD_CHECK_RET(pthread_cond_signal(&info->to_client.cond)); info->to_server.done = 1; info->server.ret = ret; @@ -2126,23 +2129,31 @@ int bench_tls(void* args) else { #ifdef HAVE_PTHREAD info->useLocalMem = argLocalMem; - pthread_mutex_init(&info->to_server.mutex, NULL); - pthread_mutex_init(&info->to_client.mutex, NULL); + PTHREAD_CHECK_RET(pthread_mutex_init(&info->to_server.mutex, + NULL)); + PTHREAD_CHECK_RET(pthread_mutex_init(&info->to_client.mutex, + NULL)); #ifdef WOLFSSL_DTLS - pthread_mutex_init(&info->dtls_mutex, NULL); - pthread_cond_init(&info->dtls_cond, NULL); + PTHREAD_CHECK_RET(pthread_mutex_init(&info->dtls_mutex, + NULL)); + PTHREAD_CHECK_RET(pthread_cond_init(&info->dtls_cond, + NULL)); #endif - pthread_cond_init(&info->to_server.cond, NULL); - pthread_cond_init(&info->to_client.cond, NULL); + PTHREAD_CHECK_RET(pthread_cond_init(&info->to_server.cond, + NULL)); + PTHREAD_CHECK_RET(pthread_cond_init(&info->to_client.cond, + NULL)); - pthread_create(&info->to_server.tid, NULL, server_thread, - info); - pthread_create(&info->to_client.tid, NULL, client_thread, - info); + PTHREAD_CHECK_RET( + pthread_create(&info->to_server.tid, NULL, + server_thread, info)); + PTHREAD_CHECK_RET( + pthread_create(&info->to_client.tid, NULL, + client_thread, info)); /* State that we won't be joining this thread */ - pthread_detach(info->to_server.tid); - pthread_detach(info->to_client.tid); + PTHREAD_CHECK_RET(pthread_detach(info->to_server.tid)); + PTHREAD_CHECK_RET(pthread_detach(info->to_client.tid)); #endif } } diff --git a/examples/echoclient/echoclient.c b/examples/echoclient/echoclient.c index 48b11ed91..7ef3220a7 100644 --- a/examples/echoclient/echoclient.c +++ b/examples/echoclient/echoclient.c @@ -285,12 +285,14 @@ void echoclient_test(void* args) } if (strncmp(msg, "quit", 4) == 0) { - fputs("sending server shutdown command: quit!\n", fout); + LIBCALL_CHECK_RET(fputs("sending server shutdown command: quit!\n", + fout)); break; } if (strncmp(msg, "break", 5) == 0) { - fputs("sending server session close: break!\n", fout); + LIBCALL_CHECK_RET(fputs("sending server session close: break!\n", + fout)); break; } @@ -313,8 +315,8 @@ void echoclient_test(void* args) } while (err == WC_PENDING_E); if (ret > 0) { reply[ret] = 0; - fputs(reply, fout); - fflush(fout) ; + LIBCALL_CHECK_RET(fputs(reply, fout)); + LIBCALL_CHECK_RET(fflush(fout)); sendSz -= ret; } #ifdef CYASSL_DTLS @@ -362,7 +364,7 @@ void echoclient_test(void* args) wolfAsync_DevClose(&devId); #endif - fflush(fout); + LIBCALL_CHECK_RET(fflush(fout)); #ifndef WOLFSSL_MDK_SHELL if (inCreated) fclose(fin); if (outCreated) fclose(fout); diff --git a/examples/echoserver/echoserver.c b/examples/echoserver/echoserver.c index 2df45d994..68691bb0a 100644 --- a/examples/echoserver/echoserver.c +++ b/examples/echoserver/echoserver.c @@ -71,11 +71,11 @@ static void SignalReady(void* args, word16 port) /* signal ready to tcp_accept */ func_args* server_args = (func_args*)args; tcp_ready* ready = server_args->signal; - pthread_mutex_lock(&ready->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&ready->mutex)); ready->ready = 1; ready->port = port; - pthread_cond_signal(&ready->cond); - pthread_mutex_unlock(&ready->mutex); + PTHREAD_CHECK_RET(pthread_cond_signal(&ready->cond)); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&ready->mutex)); #endif (void)args; (void)port; @@ -456,7 +456,7 @@ THREAD_RETURN CYASSL_THREAD echoserver_test(void* args) command[echoSz] = 0; #ifdef ECHO_OUT - fputs(command, fout); + LIBCALL_CHECK_RET(fputs(command, fout)); #endif do { diff --git a/src/crl.c b/src/crl.c index b41bd6b34..9a9dc04b7 100644 --- a/src/crl.c +++ b/src/crl.c @@ -174,13 +174,20 @@ void FreeCRL(WOLFSSL_CRL* crl, int dynamic) #ifdef HAVE_CRL_MONITOR if (crl->tid != 0) { WOLFSSL_MSG("stopping monitor thread"); - if (StopMonitor(crl->mfd) == 0) - pthread_join(crl->tid, NULL); + if (StopMonitor(crl->mfd) == 0) { + int _pthread_ret = pthread_join(crl->tid, NULL); + if (_pthread_ret != 0) + WOLFSSL_MSG("stop monitor failed in pthread_join"); + } else { WOLFSSL_MSG("stop monitor failed"); } } - pthread_cond_destroy(&crl->cond); + { + int _pthread_ret = pthread_cond_destroy(&crl->cond); + if (_pthread_ret != 0) + WOLFSSL_MSG("pthread_cond_destroy failed in FreeCRL()"); + } #endif wc_FreeMutex(&crl->crlLock); if (dynamic) /* free self */ @@ -1116,8 +1123,10 @@ static void* DoMonitor(void* arg) XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif - if (wd > 0) - inotify_rm_watch(notifyFd, wd); + if (wd > 0) { + if (inotify_rm_watch(notifyFd, wd) < 0) + WOLFSSL_MSG("inotify_rm_watch #1 failed in DoMonitor"); + } (void)close(crl->mfd); (void)close(notifyFd); return NULL; @@ -1171,8 +1180,10 @@ static void* DoMonitor(void* arg) XFREE(buff, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif - if (wd > 0) - inotify_rm_watch(notifyFd, wd); + if (wd > 0) { + if (inotify_rm_watch(notifyFd, wd) < 0) + WOLFSSL_MSG("inotify_rm_watch #2 failed in DoMonitor"); + } (void)close(crl->mfd); (void)close(notifyFd); diff --git a/src/internal.c b/src/internal.c index 930769152..414f5c4e7 100644 --- a/src/internal.c +++ b/src/internal.c @@ -12196,8 +12196,15 @@ int LoadCertByIssuer(WOLFSSL_X509_STORE* store, X509_NAME* issuer, int type) for (; suffix < MAX_SUFFIX; suffix++) { /* /folder-path/.(r)N[0..9] */ - XSNPRINTF(filename, len, "%s/%08lx.%s%d", entry->dir_name, - hash, post, suffix); + if (XSNPRINTF(filename, len, "%s/%08lx.%s%d", entry->dir_name, + hash, post, suffix) + >= len) + { + WOLFSSL_MSG("buffer overrun in LoadCertByIssuer"); + ret = BUFFER_E; + break; + } + if(wc_FileExists(filename) == 0/*0 file exists */) { if (type == X509_LU_X509) { diff --git a/src/pk.c b/src/pk.c index 3866ed04b..747f14ece 100644 --- a/src/pk.c +++ b/src/pk.c @@ -78,37 +78,72 @@ static int pk_bn_field_print_fp(XFILE fp, int indent, const char* field, if (ret == 1) { /* Print leading spaces, name and spaces before data. */ if (indent > 0) { - XFPRINTF(fp, "%*s", indent, ""); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; } - XFPRINTF(fp, "%s:\n", field); + } + if (ret == 1) { + if (XFPRINTF(fp, "%s:\n", field) < 0) + ret = 0; + } + if (ret == 1) { if (indent > 0) { - XFPRINTF(fp, "%*s", indent, ""); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; } - XFPRINTF(fp, "%*s", HEX_INDENT, ""); - + } + if (ret == 1) { + if (XFPRINTF(fp, "%*s", HEX_INDENT, "") < 0) + ret = 0; + } + if (ret == 1) { /* Print first byte - should always exist. */ if ((buf[i] != '\0') && (buf[i+1] != '\0')) { - XFPRINTF(fp, "%c", buf[i++]); - XFPRINTF(fp, "%c", buf[i++]); + if (XFPRINTF(fp, "%c", buf[i++]) < 0) + ret = 0; + else if (XFPRINTF(fp, "%c", buf[i++]) < 0) + ret = 0; } + } + if (ret == 1) { /* Print each hexadecimal character with byte separator. */ while ((buf[i] != '\0') && (buf[i+1] != '\0')) { /* Byte separator every two nibbles - one byte. */ - XFPRINTF(fp, ":"); + if (XFPRINTF(fp, ":") < 0) { + ret = 0; + break; + } /* New line after every 15 bytes - 30 nibbles. */ if (i % MAX_DIGITS_PER_LINE == 0) { - XFPRINTF(fp, "\n"); - if (indent > 0) { - XFPRINTF(fp, "%*s", indent, ""); + if (XFPRINTF(fp, "\n") < 0) { + ret = 0; + break; + } + if (indent > 0) { + if (XFPRINTF(fp, "%*s", indent, "") < 0) { + ret = 0; + break; + } + } + if (XFPRINTF(fp, "%*s", HEX_INDENT, "") < 0) { + ret = 0; + break; } - XFPRINTF(fp, "%*s", HEX_INDENT, ""); } /* Print two nibbles - one byte. */ - XFPRINTF(fp, "%c", buf[i++]); - XFPRINTF(fp, "%c", buf[i++]); + if (XFPRINTF(fp, "%c", buf[i++]) < 0) { + ret = 0; + break; + } + if (XFPRINTF(fp, "%c", buf[i++]) < 0) { + ret = 0; + break; + } } /* Ensure on new line after data. */ - XFPRINTF(fp, "\n"); + if (XFPRINTF(fp, "\n") < 0) { + ret = 0; + } } /* Dispose of any allocated character array. */ @@ -1836,8 +1871,11 @@ int wolfSSL_RSA_print_fp(XFILE fp, WOLFSSL_RSA* rsa, int indent) ret = 0; } else { - XFPRINTF(fp, "%*s", indent, ""); - XFPRINTF(fp, "RSA Private-Key: (%d bit, 2 primes)\n", keySize); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; + else if (XFPRINTF(fp, "RSA Private-Key: (%d bit, 2 primes)\n", + keySize) < 0) + ret = 0; } } /* Print out any components available. */ @@ -4184,8 +4222,10 @@ int wolfSSL_DSA_print_fp(XFILE fp, WOLFSSL_DSA* dsa, int indent) ret = 0; } else { - XFPRINTF(fp, "%*s", indent, ""); - XFPRINTF(fp, "Private-Key: (%d bit)\n", pBits); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; + else if (XFPRINTF(fp, "Private-Key: (%d bit)\n", pBits) < 0) + ret = 0; } } if (ret == 1 && dsa->priv_key != NULL) { @@ -7673,13 +7713,18 @@ int wolfSSL_EC_KEY_print_fp(XFILE fp, WOLFSSL_EC_KEY* key, int indent) } } if (ret == 1) { - XFPRINTF(fp, "%*s", indent, ""); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; + } + if (ret == 1) { if (key->priv_key != NULL && !wolfSSL_BN_is_zero(key->priv_key)) { - XFPRINTF(fp, "Private-Key: (%d bit)\n", bits); + if (XFPRINTF(fp, "Private-Key: (%d bit)\n", bits) < 0) + ret = 0; priv = 1; } else { - XFPRINTF(fp, "Public-Key: (%d bit)\n", bits); + if (XFPRINTF(fp, "Public-Key: (%d bit)\n", bits) < 0) + ret = 0; } if (priv) { @@ -7703,13 +7748,17 @@ int wolfSSL_EC_KEY_print_fp(XFILE fp, WOLFSSL_EC_KEY* key, int indent) if (nid > 0) { curve = wolfSSL_OBJ_nid2ln(nid); if (curve != NULL) { - XFPRINTF(fp, "%*s", indent, ""); - XFPRINTF(fp, "ASN1 OID: %s\n", curve); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; + else if (XFPRINTF(fp, "ASN1 OID: %s\n", curve) < 0) + ret = 0; } nistName = wolfSSL_EC_curve_nid2nist(nid); if (nistName != NULL) { - XFPRINTF(fp, "%*s", indent, ""); - XFPRINTF(fp, "NIST CURVE: %s\n", nistName); + if (XFPRINTF(fp, "%*s", indent, "") < 0) + ret = 0; + else if (XFPRINTF(fp, "NIST CURVE: %s\n", nistName) < 0) + ret = 0; } } } diff --git a/src/ssl.c b/src/ssl.c index 8d946f07b..ef8c09e35 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -4426,7 +4426,8 @@ void wolfSSL_ERR_print_errors_fp(XFILE fp, int err) WOLFSSL_ENTER("wolfSSL_ERR_print_errors_fp"); SetErrorString(err, data); - XFPRINTF(fp, "%s", data); + if (XFPRINTF(fp, "%s", data) < 0) + WOLFSSL_MSG("fprintf failed in wolfSSL_ERR_print_errors_fp"); } #if defined(OPENSSL_EXTRA) || defined(DEBUG_WOLFSSL_VERBOSE) @@ -16215,8 +16216,13 @@ cleanup: ret = wc_PeekErrorNode(0, &file, &reason, &line); if (ret >= 0) { const char* r = wolfSSL_ERR_reason_error_string(0 - ret); - XSNPRINTF(buf, sizeof(buf), "error:%d:wolfSSL library:%s:%s:%d\n", - ret, r, file, line); + if (XSNPRINTF(buf, sizeof(buf), + "error:%d:wolfSSL library:%s:%s:%d\n", + ret, r, file, line) + >= (int)sizeof(buf)) + { + WOLFSSL_MSG("Buffer overrun formatting error message"); + } wolfSSL_BIO_write(bio, buf, (int)XSTRLEN(buf)); wc_RemoveErrorNode(0); } @@ -19464,10 +19470,23 @@ char* wolfSSL_i2s_ASN1_STRING(WOLFSSL_v3_ext_method *method, XMEMSET(tmp, 0, tmpSz); for (i = 0; i < tmpSz && i < (s->length - 1); i++) { - XSNPRINTF(val, valSz - 1, "%02X:", str[i]); + if (XSNPRINTF(val, valSz, "%02X:", str[i]) + >= valSz) + { + WOLFSSL_MSG("Buffer overrun"); + XFREE(str, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return NULL; + } XSTRNCAT(tmp, val, valSz); } - XSNPRINTF(val, valSz - 1, "%02X", str[i]); + if (XSNPRINTF(val, valSz, "%02X", str[i]) + >= valSz) + { + WOLFSSL_MSG("Buffer overrun"); + XFREE(str, NULL, DYNAMIC_TYPE_TMP_BUFFER); + return NULL; + } + XSTRNCAT(tmp, val, valSz); XFREE(str, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -36001,6 +36020,7 @@ char *wolfSSL_BN_bn2hex(const WOLFSSL_BIGNUM *bn) int wolfSSL_BN_print_fp(XFILE fp, const WOLFSSL_BIGNUM *bn) { char *buf; + int ret; WOLFSSL_ENTER("wolfSSL_BN_print_fp"); @@ -36015,10 +36035,14 @@ int wolfSSL_BN_print_fp(XFILE fp, const WOLFSSL_BIGNUM *bn) return WOLFSSL_FAILURE; } - XFPRINTF(fp, "%s", buf); + if (XFPRINTF(fp, "%s", buf) < 0) + ret = WOLFSSL_FAILURE; + else + ret = WOLFSSL_SUCCESS; + XFREE(buf, NULL, DYNAMIC_TYPE_OPENSSL); - return WOLFSSL_SUCCESS; + return ret; } #endif /* !NO_FILESYSTEM */ @@ -36191,7 +36215,12 @@ int wolfSSL_ASN1_STRING_print_ex(WOLFSSL_BIO *out, WOLFSSL_ASN1_STRING *str, return WOLFSSL_FAILURE; } XMEMSET(typebuf, 0, type_len); - XSNPRINTF((char*)typebuf, (size_t)type_len , "%s:", tag); + if (XSNPRINTF((char*)typebuf, (size_t)type_len , "%s:", tag) + >= (int)type_len) + { + WOLFSSL_MSG("Buffer overrun."); + return WOLFSSL_FAILURE; + } type_len--; } @@ -37928,7 +37957,8 @@ int wolfSSL_RAND_write_file(const char* fname) bytes = 0; } else { - XFWRITE(buf, 1, bytes, f); + size_t bytes_written = XFWRITE(buf, 1, bytes, f); + bytes = (int)bytes_written; XFCLOSE(f); } } diff --git a/src/x509.c b/src/x509.c index 3655369d7..c5890aea5 100644 --- a/src/x509.c +++ b/src/x509.c @@ -1193,8 +1193,10 @@ int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext, { char isCa[] = "TRUE"; char notCa[] = "FALSE"; - XSNPRINTF(tmp, sz, "%*sCA:%s", indent, "", - obj->ca ? isCa : notCa); + if (XSNPRINTF(tmp, sz, "%*sCA:%s", indent, "", + obj->ca ? isCa : notCa) + >= sz) + return rc; break; } case ALT_NAMES_OID: @@ -1221,11 +1223,17 @@ int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext, WOLFSSL_MSG("Memory error"); return rc; } - if (sk->next) - XSNPRINTF(val, len, "%*s%s,", indent, "", str->strData); - else - XSNPRINTF(val, len, "%*s%s", indent, "", str->strData); - + if (sk->next) { + if (XSNPRINTF(val, len, "%*s%s,", + indent, "", str->strData) + >= len) + return rc; + } else { + if (XSNPRINTF(val, len, "%*s%s", + indent, "", str->strData) + >= len) + return rc; + } XSTRNCAT(tmp, val, len); XFREE(val, NULL, DYNAMIC_TYPE_TMP_BUFFER); } @@ -1238,7 +1246,9 @@ int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext, { char* asn1str; asn1str = wolfSSL_i2s_ASN1_STRING(NULL, str); - XSNPRINTF(tmp, sz, "%*s%s", indent, "", asn1str); + if (XSNPRINTF(tmp, sz, "%*s%s", indent, "", asn1str) + >= sz) + return rc; XFREE(asn1str, NULL, DYNAMIC_TYPE_TMP_BUFFER); break; } @@ -1250,7 +1260,9 @@ int wolfSSL_X509V3_EXT_print(WOLFSSL_BIO *out, WOLFSSL_X509_EXTENSION *ext, break; default: - XSNPRINTF(tmp, sz, "%*s%s", indent, "", str->strData); + if (XSNPRINTF(tmp, sz, "%*s%s", indent, "", str->strData) + >= sz) + return rc; } if (wolfSSL_BIO_write(out, tmp, (int)XSTRLEN(tmp)) == (int)XSTRLEN(tmp)) { @@ -3051,7 +3063,10 @@ char* wolfSSL_X509_get_name_oneline(WOLFSSL_X509_NAME* name, char* in, int sz) WOLFSSL_MSG("Memory error"); return NULL; } - XSNPRINTF(str, strSz, "%s=%s, ", sn, buf); + if (XSNPRINTF(str, strSz, "%s=%s, ", sn, buf) >= strSz) { + WOLFSSL_MSG("buffer overrun"); + return NULL; + } } else { /* Copy last name entry @@ -3064,7 +3079,10 @@ char* wolfSSL_X509_get_name_oneline(WOLFSSL_X509_NAME* name, char* in, int sz) WOLFSSL_MSG("Memory error"); return NULL; } - XSNPRINTF(str, strSz, "%s=%s", sn, buf); + if (XSNPRINTF(str, strSz, "%s=%s", sn, buf) >= strSz) { + WOLFSSL_MSG("buffer overrun"); + return NULL; + } } /* Copy string to tmpBuf */ XSTRNCAT(tmpBuf, str, strSz); @@ -5478,7 +5496,13 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, (int)XSTRLEN(" Version:")) <= 0) { return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp), " %d (0x%x)\n", version, (byte)version-1); + if (XSNPRINTF(tmp, sizeof(tmp), " %d (0x%x)\n", + version, (byte)version-1) + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { return WOLFSSL_FAILURE; } @@ -5503,7 +5527,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, /* if serial can fit into byte than print on the same line */ if (sz <= (int)sizeof(byte)) { char tmp[17]; - XSNPRINTF(tmp, sizeof(tmp), " %d (0x%x)\n", serial[0],serial[0]); + if (XSNPRINTF(tmp, sizeof(tmp), " %d (0x%x)\n", serial[0],serial[0]) + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { return WOLFSSL_FAILURE; } @@ -5522,11 +5551,21 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, } tmp[0] = '\0'; for (i = 0; i < sz - 1 && (3 * i) < tmpSz - valSz; i++) { - XSNPRINTF(val, sizeof(val) - 1, "%02x:", serial[i]); + if (XSNPRINTF(val, sizeof(val), "%02x:", serial[i]) + >= (int)sizeof(val)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } val[3] = '\0'; /* make sure is null terminated */ XSTRNCAT(tmp, val, valSz); } - XSNPRINTF(val, sizeof(val) - 1, "%02x\n", serial[i]); + if (XSNPRINTF(val, sizeof(val), "%02x\n", serial[i]) + >= (int)sizeof(val)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } val[3] = '\0'; /* make sure is null terminated */ XSTRNCAT(tmp, val, valSz); if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { @@ -5748,9 +5787,14 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, #endif return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1, "%s%s: (%d bit)\n%s\n", + if (XSNPRINTF(tmp, sizeof(tmp), "%s%s: (%d bit)\n%s\n", " ", "Public-Key", 8 * sz, - " Modulus:"); + " Modulus:") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmp[sizeof(tmp) - 1] = '\0'; if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { @@ -5762,7 +5806,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, } /* print out modulus */ - XSNPRINTF(tmp, sizeof(tmp) - 1," "); + if (XSNPRINTF(tmp, sizeof(tmp), " ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmp[sizeof(tmp) - 1] = '\0'; if (mp_leading_bit(&rsa->n)) { lbit = 1; @@ -5783,10 +5832,15 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, mp_to_unsigned_bin(&rsa->n, rawKey); for (idx = 0; idx < (word32)rawLen; idx++) { char val[5]; - int valSz = 5; + int valSz = (int)sizeof(val); if ((idx == 0) && !lbit) { - XSNPRINTF(val, valSz - 1, "%02x", rawKey[idx]); + if (XSNPRINTF(val, valSz, "%02x", rawKey[idx]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } else if ((idx != 0) && (((idx + lbit) % 15) == 0)) { tmp[sizeof(tmp) - 1] = '\0'; @@ -5800,12 +5854,27 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, #endif return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1, - ":\n "); - XSNPRINTF(val, valSz - 1, "%02x", rawKey[idx]); + if (XSNPRINTF(tmp, sizeof(tmp), + ":\n ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } + if (XSNPRINTF(val, valSz, "%02x", rawKey[idx]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } else { - XSNPRINTF(val, valSz - 1, ":%02x", rawKey[idx]); + if (XSNPRINTF(val, valSz, ":%02x", rawKey[idx]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } XSTRNCAT(tmp, val, valSz); } @@ -5856,8 +5925,13 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, idx = ByteReverseWord32(idx); #endif } - XSNPRINTF(tmp, sizeof(tmp) - 1, - "\n Exponent: %u (0x%x)\n",idx, idx); + if (XSNPRINTF(tmp, sizeof(tmp), + "\n Exponent: %u (0x%x)\n",idx, idx) + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { XFREE(rawKey, NULL, DYNAMIC_TYPE_TMP_BUFFER); @@ -5915,10 +5989,15 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, #endif return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1, "%s%s: (%d bit)\n%s\n", + if (XSNPRINTF(tmp, sizeof(tmp), "%s%s: (%d bit)\n%s\n", " ", "Public-Key", 8 * wc_ecc_size(ecc), - " pub:"); + " pub:") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmp[sizeof(tmp) - 1] = '\0'; if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { @@ -5928,7 +6007,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, #endif return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1," "); + if (XSNPRINTF(tmp, sizeof(tmp)," ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } { word32 derSz; byte* der; @@ -5959,7 +6043,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int valSz = 5; if (i == 0) { - XSNPRINTF(val, valSz - 1, "%02x", der[i]); + if (XSNPRINTF(val, valSz, "%02x", der[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } else if ((i % 15) == 0) { tmp[sizeof(tmp) - 1] = '\0'; @@ -5973,12 +6062,27 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1, - ":\n "); - XSNPRINTF(val, valSz - 1, "%02x", der[i]); + if (XSNPRINTF(tmp, sizeof(tmp), + ":\n ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } + if (XSNPRINTF(val, valSz, "%02x", der[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } else { - XSNPRINTF(val, valSz - 1, ":%02x", der[i]); + if (XSNPRINTF(val, valSz, ":%02x", der[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } XSTRNCAT(tmp, val, valSz); } @@ -6000,9 +6104,14 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, XFREE(der, x509->heap, DYNAMIC_TYPE_TMP_BUFFER); } - XSNPRINTF(tmp, sizeof(tmp) - 1, "\n%s%s: %s\n", + if (XSNPRINTF(tmp, sizeof(tmp), "\n%s%s: %s\n", " ", "ASN1 OID", - ecc->dp->name); + ecc->dp->name) + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { wc_ecc_free(ecc); @@ -6038,8 +6147,13 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, char val[5]; int valSz = 5; - XSNPRINTF(tmp, sizeof(tmp), - " X509v3 Subject Key Identifier: "); + if (XSNPRINTF(tmp, sizeof(tmp), + " X509v3 Subject Key Identifier: ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (x509->subjKeyIdCrit) { XSTRNCAT(tmp, "critical", sizeof(tmp) - XSTRLEN(tmp) - 1); } @@ -6050,12 +6164,27 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, } XMEMSET(tmp, 0, sizeof(tmp)); - XSNPRINTF(tmp, sizeof(tmp) - 1, " "); + if (XSNPRINTF(tmp, sizeof(tmp), " ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } for (i = 0; i < sizeof(tmp) && i < (x509->subjKeyIdSz - 1); i++) { - XSNPRINTF(val, valSz - 1, "%02X:", x509->subjKeyId[i]); + if (XSNPRINTF(val, valSz, "%02X:", x509->subjKeyId[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } XSTRNCAT(tmp, val, valSz); } - XSNPRINTF(val, valSz - 1, "%02X\n", x509->subjKeyId[i]); + if (XSNPRINTF(val, valSz, "%02X\n", x509->subjKeyId[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } XSTRNCAT(tmp, val, valSz); if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { return WOLFSSL_FAILURE; @@ -6071,8 +6200,13 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, int valSz = 5; int len = 0; - XSNPRINTF(tmp, sizeof(tmp), - " X509v3 Authority Key Identifier: "); + if (XSNPRINTF(tmp, sizeof(tmp), + " X509v3 Authority Key Identifier: ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (x509->authKeyIdCrit) { XSTRNCAT(tmp, "critical", sizeof(tmp) - XSTRLEN(tmp) - 1); } @@ -6083,7 +6217,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, } XMEMSET(tmp, 0, sizeof(tmp)); - XSNPRINTF(tmp, sizeof(tmp) - 1, " keyid"); + if (XSNPRINTF(tmp, sizeof(tmp), " keyid") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } for (i = 0; i < x509->authKeyIdSz; i++) { /* check if buffer is almost full */ if (XSTRLEN(tmp) >= sizeof(tmp) - valSz) { @@ -6092,7 +6231,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, } tmp[0] = '\0'; } - XSNPRINTF(val, valSz - 1, ":%02X", x509->authKeyId[i]); + if (XSNPRINTF(val, valSz, ":%02X", x509->authKeyId[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } XSTRNCAT(tmp, val, valSz); } len = (int)XSTRLEN("\n"); @@ -6106,8 +6250,13 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, if (x509->basicConstSet) { char tmp[100]; - XSNPRINTF(tmp, sizeof(tmp), - "\n X509v3 Basic Constraints: "); + if (XSNPRINTF(tmp, sizeof(tmp), + "\n X509v3 Basic Constraints: ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (x509->basicConstCrit) { XSTRNCAT(tmp, "critical", sizeof(tmp) - XSTRLEN(tmp) - 1); } @@ -6118,9 +6267,14 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, } XMEMSET(tmp, 0, sizeof(tmp)); - XSNPRINTF(tmp, sizeof(tmp), + if (XSNPRINTF(tmp, sizeof(tmp), " CA:%s\n", - (x509->isCa)? "TRUE": "FALSE"); + (x509->isCa)? "TRUE": "FALSE") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { return WOLFSSL_FAILURE; } @@ -6143,7 +6297,12 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, (int)XSTRLEN(" Signature Algorithm: ")) <= 0) { return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1,"%s\n", GetSigName(sigOid)); + if (XSNPRINTF(tmp, sizeof(tmp),"%s\n", GetSigName(sigOid)) + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmp[sizeof(tmp) - 1] = '\0'; if (wolfSSL_BIO_write(bio, tmp, (int)XSTRLEN(tmp)) <= 0) { return WOLFSSL_FAILURE; @@ -6159,14 +6318,24 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1," "); + if (XSNPRINTF(tmp, sizeof(tmp)," ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmp[sizeof(tmp) - 1] = '\0'; for (i = 0; i < sigSz; i++) { char val[5]; int valSz = 5; if (i == 0) { - XSNPRINTF(val, valSz - 1, "%02x", sig[i]); + if (XSNPRINTF(val, valSz, "%02x", sig[i]) + >= valSz - 1) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } else if (((i % 18) == 0)) { tmp[sizeof(tmp) - 1] = '\0'; @@ -6175,12 +6344,27 @@ int wolfSSL_X509_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509* x509, XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER); return WOLFSSL_FAILURE; } - XSNPRINTF(tmp, sizeof(tmp) - 1, - ":\n "); - XSNPRINTF(val, valSz - 1, "%02x", sig[i]); + if (XSNPRINTF(tmp, sizeof(tmp), + ":\n ") + >= (int)sizeof(tmp)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } + if (XSNPRINTF(val, valSz, "%02x", sig[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } else { - XSNPRINTF(val, valSz - 1, ":%02x", sig[i]); + if (XSNPRINTF(val, valSz, ":%02x", sig[i]) + >= valSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } } XSTRNCAT(tmp, val, valSz); } @@ -6278,8 +6462,13 @@ int wolfSSL_X509_signature_print(WOLFSSL_BIO *bp, for (i = 0; i < length; ++i) { char hex_digits[4]; #ifdef XSNPRINTF - XSNPRINTF(hex_digits, sizeof(hex_digits), "%c%02X", i>0 ? ':' : ' ', - (unsigned int)sigalg->algorithm->obj[idx+i]); + if (XSNPRINTF(hex_digits, sizeof(hex_digits), "%c%02X", i>0 ? ':' : ' ', + (unsigned int)sigalg->algorithm->obj[idx+i]) + >= (int)sizeof(hex_digits)) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } #else XSPRINTF(hex_digits, "%c%02X", i>0 ? ':' : ' ', (unsigned int)sigalg->algorithm->obj[idx+i]); @@ -11422,11 +11611,21 @@ int wolfSSL_X509_NAME_print_ex(WOLFSSL_BIO* bio, WOLFSSL_X509_NAME* name, } if (i < count - 1) { - XSNPRINTF(tmp, tmpSz, "%s=%s,", buf, nameStr); + if (XSNPRINTF(tmp, tmpSz, "%s=%s,", buf, nameStr) + >= tmpSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmpSz = len + nameStrSz + 2; /* 2 for '=', comma */ } else { - XSNPRINTF(tmp, tmpSz, "%s=%s", buf, nameStr); + if (XSNPRINTF(tmp, tmpSz, "%s=%s", buf, nameStr) + >= tmpSz) + { + WOLFSSL_MSG("buffer overrun"); + return WOLFSSL_FAILURE; + } tmpSz = len + nameStrSz + 1; /* 1 for '=' */ if (bio->type != WOLFSSL_BIO_FILE) ++tmpSz; /* include the terminating null when not writing to a diff --git a/tests/api.c b/tests/api.c index f9ef9fd77..a055befe4 100644 --- a/tests/api.c +++ b/tests/api.c @@ -21804,20 +21804,20 @@ static int test_wc_curve25519_export_key_raw (void) if(0 != wc_InitRng(&rng)){ printf(testingFmt, "failed due to wc_InitRng"); - fflush( stdout ); + fflush(stdout); return 1; } if(0 != wc_curve25519_init(&key)){ printf(testingFmt, "failed due to wc_curve25519_init"); - fflush( stdout ); + fflush(stdout); wc_FreeRng(&rng); return 1; } if(0 != wc_curve25519_make_key(&rng, CURVE25519_KEYSIZE, &key)){ printf(testingFmt, "failed due to wc_curve25519_make_key"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21834,7 +21834,7 @@ static int test_wc_curve25519_export_key_raw (void) NULL , privateKey, &prvkSz, publicKey, &pubkSz)){ printf(testingFmt,"failed at bad-arg-case-1."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21848,7 +21848,7 @@ static int test_wc_curve25519_export_key_raw (void) &key , NULL, &prvkSz, publicKey, &pubkSz)){ printf(testingFmt,"failed at bad-arg-case-2."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21862,7 +21862,7 @@ static int test_wc_curve25519_export_key_raw (void) &key , privateKey, NULL, publicKey, &pubkSz)){ printf(testingFmt,"failed at bad-arg-case-3."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21876,7 +21876,7 @@ static int test_wc_curve25519_export_key_raw (void) &key , privateKey, &prvkSz, NULL, &pubkSz)){ printf(testingFmt,"failed at bad-arg-case-4."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21890,7 +21890,7 @@ static int test_wc_curve25519_export_key_raw (void) &key , privateKey, &prvkSz, publicKey, NULL )){ printf(testingFmt,"failed at bad-arg-case-5."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21905,7 +21905,7 @@ static int test_wc_curve25519_export_key_raw (void) if( 0 != wc_curve25519_export_private_raw(&key, prik, &prksz)){ printf(testingFmt,"failed due to wc_curve25519_export_private_raw"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21917,7 +21917,7 @@ static int test_wc_curve25519_export_key_raw (void) if(0 != wc_curve25519_export_public(&key, pubk, &pbksz)){ printf(testingFmt,"failed due to wc_curve25519_export_public"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21931,7 +21931,7 @@ static int test_wc_curve25519_export_key_raw (void) publicKey, &pubkSz)){ printf(testingFmt,"failed due to wc_curve25519_export_key_raw"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21947,7 +21947,7 @@ static int test_wc_curve25519_export_key_raw (void) 0 == XMEMCMP(publicKey, pubk, CURVE25519_KEYSIZE)){ printf(resultFmt,passed); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 0; @@ -21956,7 +21956,7 @@ static int test_wc_curve25519_export_key_raw (void) else{ printf(testingFmt,"failed due to key-contents-inconsistency."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -21965,14 +21965,14 @@ static int test_wc_curve25519_export_key_raw (void) else{ printf(testingFmt,"failed due to bad-key-size."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; } #endif - fflush( stdout ); + fflush(stdout); return 0; } /* end of test_wc_curve25519_export_key_raw */ @@ -22002,20 +22002,20 @@ static int test_wc_curve25519_export_key_raw_ex (void) if(0 != wc_InitRng(&rng)){ printf(testingFmt, "failed due to wc_InitRng"); - fflush( stdout ); + fflush(stdout); return 1; } if(0 != wc_curve25519_init(&key)){ printf(testingFmt, "failed due to wc_curve25519_init"); - fflush( stdout ); + fflush(stdout); wc_FreeRng(&rng); return 1; } if(0 != wc_curve25519_make_key(&rng, CURVE25519_KEYSIZE, &key)){ printf(testingFmt, "failed due to wc_curve25519_make_key"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22032,7 +22032,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-1."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22046,7 +22046,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, publicKey, &pubkSz, EC25519_LITTLE_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-2."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22059,7 +22059,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) NULL,publicKey, &pubkSz,EC25519_LITTLE_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-3."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22072,7 +22072,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, NULL, &pubkSz, EC25519_LITTLE_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-4."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22085,7 +22085,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, publicKey, NULL, EC25519_LITTLE_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-5."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22098,7 +22098,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, publicKey, &pubkSz, EC25519_BIG_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-6."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22111,7 +22111,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) publicKey, &pubkSz, EC25519_BIG_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-7."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22124,7 +22124,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) NULL, publicKey, &pubkSz, EC25519_BIG_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-8."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22137,7 +22137,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, NULL, &pubkSz, EC25519_BIG_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-9."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22150,7 +22150,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, publicKey, NULL, EC25519_BIG_ENDIAN)){ printf(testingFmt,"failed at bad-arg-case-10."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22165,7 +22165,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) &prvkSz, publicKey, NULL, EC25519_BIG_ENDIAN + 10 )){ printf(testingFmt,"failed at bad-arg-case-11."); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22179,7 +22179,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) if(0 != wc_curve25519_export_private_raw( &key, prik, &prksz )){ printf(testingFmt,"failed due to wc_curve25519_export_private_raw"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22190,7 +22190,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) if(0 != wc_curve25519_export_public( &key, pubk, &pbksz )){ printf(testingFmt,"failed due to wc_curve25519_export_public"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22204,7 +22204,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) publicKey, &pubkSz, EC25519_BIG_ENDIAN)) { printf(testingFmt,"failed due to wc_curve25519_export_key_raw_ex"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22229,7 +22229,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) else{ printf(testingFmt,"failed due to key-size-inconsistency"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22239,7 +22239,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) printf(testingFmt, "failed due to wc_curve25519_export_key_raw_ex"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22249,7 +22249,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) else{ printf(testingFmt,"failed due to key-contents-inconsistency"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22259,7 +22259,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) else{ printf(testingFmt,"failed due to bad-key-size"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22280,7 +22280,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) /* no more test*/ printf(resultFmt, passed ); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 0; @@ -22288,7 +22288,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) else{ printf(testingFmt,"failed due to key-size-inconsistency"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22298,7 +22298,7 @@ static int test_wc_curve25519_export_key_raw_ex (void) printf(testingFmt, "failed due to wc_curve25519_export_key_raw_ex(BIGENDIAN)"); - fflush( stdout ); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); return 1; @@ -22482,6 +22482,7 @@ static int test_wc_curve25519_shared_secret_ex(void) printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve25519_free(&private_key); wc_curve25519_free(&public_key); wc_FreeRng(&rng); @@ -22551,6 +22552,7 @@ static int test_wc_curve25519_make_pub(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); #endif @@ -22620,6 +22622,7 @@ static int test_wc_curve25519_export_public_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); #endif @@ -22712,6 +22715,7 @@ static int test_wc_curve25519_import_private_raw_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); @@ -22748,6 +22752,7 @@ static int test_wc_curve25519_import_private (void) ret = wc_curve25519_import_private(priv, privSz, &key); } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve25519_free(&key); wc_FreeRng(&rng); #endif @@ -22811,6 +22816,7 @@ static int test_wc_curve25519_export_private_raw_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve25519_free(&key); #endif return ret; @@ -22857,6 +22863,7 @@ static int test_wc_ed448_make_key (void) printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -22895,6 +22902,7 @@ static int test_wc_ed448_init (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ed448_free(&key); @@ -22964,6 +22972,7 @@ static int test_wc_ed448_sign_msg (void) } /* END sign */ printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #ifdef HAVE_ED448_VERIFY printf(testingFmt, "wc_ed448_verify_msg()"); @@ -23016,6 +23025,7 @@ static int test_wc_ed448_sign_msg (void) } /* END verify. */ printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif /* Verify. */ if (wc_FreeRng(&rng) && ret == 0) { @@ -23079,6 +23089,7 @@ static int test_wc_ed448_import_public (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -23180,6 +23191,7 @@ static int test_wc_ed448_import_private_key (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -23246,6 +23258,7 @@ static int test_wc_ed448_export (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wc_ed448_export_private_only()"); if (ret == 0) { @@ -23271,6 +23284,7 @@ static int test_wc_ed448_export (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -23319,6 +23333,7 @@ static int test_wc_ed448_size (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (ret == 0) { printf(testingFmt, "wc_ed448_sig_size()"); @@ -23336,6 +23351,7 @@ static int test_wc_ed448_size (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); } /* END wc_ed448_sig_size() */ if (ret == 0) { @@ -23351,6 +23367,7 @@ static int test_wc_ed448_size (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); } /* END wc_ed448_pub_size */ if (ret == 0) { @@ -23366,6 +23383,7 @@ static int test_wc_ed448_size (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); } /* END wc_ed448_pub_size */ if (wc_FreeRng(&rng) && ret == 0) { @@ -23430,6 +23448,7 @@ static int test_wc_ed448_exportKey (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (ret == 0) { printf(testingFmt, "wc_ed448_export_key()"); @@ -23456,6 +23475,7 @@ static int test_wc_ed448_exportKey (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); } /* END wc_ed448_export_key() */ /* Cross check output. */ @@ -23532,6 +23552,7 @@ static int test_wc_Ed448PublicKeyToDer (void) wc_ed448_free(&key); } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -23562,6 +23583,7 @@ static int test_wc_curve448_init (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); /* Test good args for wc_curve_448_free */ wc_curve448_free(&key); @@ -23634,6 +23656,7 @@ static int test_wc_curve448_make_key (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); #endif return ret; @@ -23719,6 +23742,7 @@ static int test_wc_curve448_shared_secret_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&private_key); wc_curve448_free(&public_key); wc_FreeRng(&rng); @@ -23789,6 +23813,7 @@ static int test_wc_curve448_export_public_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); wc_FreeRng(&rng); #endif @@ -23852,6 +23877,7 @@ static int test_wc_curve448_export_private_raw_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); #endif return ret; @@ -23945,6 +23971,7 @@ static int test_wc_curve448_import_private_raw_ex (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); #endif @@ -23985,6 +24012,7 @@ static int test_wc_curve448_export_key_raw (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); wc_FreeRng(&rng); #endif @@ -24023,6 +24051,7 @@ static int test_wc_curve448_import_private (void) ret = wc_curve448_import_private(priv, privSz, &key); } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); wc_FreeRng(&rng); #endif @@ -24055,6 +24084,7 @@ static int test_wc_curve448_size (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_curve448_free(&key); #endif return ret; @@ -24109,6 +24139,7 @@ static int test_wc_ecc_make_key (void) #endif printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -24140,6 +24171,7 @@ static int test_wc_ecc_init (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_free(&key); @@ -24190,6 +24222,7 @@ static int test_wc_ecc_check_key (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24243,6 +24276,7 @@ static int test_wc_ecc_get_generator(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_del_point(pt); #endif @@ -24291,6 +24325,7 @@ static int test_wc_ecc_size (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24572,6 +24607,7 @@ static int test_wc_ecc_shared_secret (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24643,6 +24679,7 @@ static int test_wc_ecc_export_x963 (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24756,6 +24793,7 @@ static int test_wc_ecc_export_x963_ex (void) #endif printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24832,6 +24870,7 @@ static int test_wc_ecc_import_x963 (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24915,6 +24954,7 @@ static int ecc_import_private_key (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -24982,6 +25022,7 @@ static int test_wc_ecc_export_private_only (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25054,6 +25095,7 @@ static int test_wc_ecc_rs_to_sig (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wc_ecc_sig_to_rs()"); if (ret == 0) { ret = wc_ecc_sig_to_rs(sig, siglen, r, &rlen, s, &slen); @@ -25081,6 +25123,7 @@ static int test_wc_ecc_rs_to_sig (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -25153,6 +25196,7 @@ static int test_wc_ecc_import_raw(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_free(&key); @@ -25227,6 +25271,7 @@ static int test_wc_ecc_import_unsigned(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_free(&key); @@ -25272,6 +25317,7 @@ static int test_wc_ecc_sig_size (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25323,6 +25369,7 @@ static int test_wc_ecc_ctx_new (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25372,6 +25419,7 @@ static int test_wc_ecc_ctx_reset (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25424,6 +25472,7 @@ static int test_wc_ecc_ctx_set_peer_salt (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wc_ecc_ctx_set_peer_salt()"); if (ret == 0) { @@ -25443,6 +25492,7 @@ static int test_wc_ecc_ctx_set_peer_salt (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25496,6 +25546,7 @@ static int test_wc_ecc_ctx_set_info (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25604,6 +25655,7 @@ static int test_wc_ecc_encryptDecrypt (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wc_ecc_decrypt()"); #ifdef WOLFSSL_ECIES_OLD @@ -25652,6 +25704,7 @@ static int test_wc_ecc_encryptDecrypt (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -25683,6 +25736,7 @@ static int test_wc_ecc_del_point (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_del_point(pt); @@ -25772,6 +25826,7 @@ static int test_wc_ecc_pointFns (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); /* Import */ printf(testingFmt, "wc_ecc_import_point_der()"); @@ -25803,6 +25858,7 @@ static int test_wc_ecc_pointFns (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); /* Copy */ printf(testingFmt, "wc_ecc_copy_point()"); @@ -25824,6 +25880,7 @@ static int test_wc_ecc_pointFns (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wc_ecc_cmp_point()"); /* Compare point */ @@ -25843,6 +25900,7 @@ static int test_wc_ecc_pointFns (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wc_ecc_point_is_at_infinity()"); /* At infinity if return == 1, otherwise return == 0. */ @@ -25860,6 +25918,7 @@ static int test_wc_ecc_pointFns (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #if !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION>2)) #ifdef USE_ECC_B_PARAM @@ -25881,6 +25940,7 @@ static int test_wc_ecc_pointFns (void) } } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif /* USE_ECC_B_PARAM */ #endif /* !HAVE_FIPS || HAVE_FIPS_VERSION > 2 */ @@ -25986,6 +26046,7 @@ static int test_wc_ecc_shared_secret_ssh (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -26218,6 +26279,7 @@ static int test_wc_ecc_mulmod (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_free(&key1); wc_ecc_free(&key2); @@ -26281,6 +26343,7 @@ static int test_wc_ecc_is_valid_idx (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); if (wc_FreeRng(&rng) && ret == 0) { ret = WOLFSSL_FATAL_ERROR; @@ -26328,6 +26391,7 @@ static int test_wc_ecc_get_curve_id_from_oid (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -26362,7 +26426,8 @@ static int test_wc_ecc_sig_size_calc (void) ret = 0; } } - printf(resultFmt, ret == 0 ? passed : failed); + printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_ecc_free(&key); wc_FreeRng(&rng); #endif @@ -26415,6 +26480,7 @@ static int test_ToTraditional (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_ToTraditional*/ @@ -26496,6 +26562,7 @@ static int test_wc_EccPrivateKeyToDer (void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_EccPrivateKeyToDer*/ @@ -26603,6 +26670,7 @@ static int test_wc_Ed25519KeyToDer (void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_Ed25519KeyToDer*/ @@ -26669,6 +26737,7 @@ static int test_wc_Ed25519PrivateKeyToDer (void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_Ed25519PrivateKeyToDer*/ @@ -26734,6 +26803,7 @@ static int test_wc_Ed448KeyToDer (void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_Ed448KeyToDer*/ @@ -26799,6 +26869,7 @@ static int test_wc_Ed448PrivateKeyToDer (void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_Ed448PrivateKeyToDer*/ @@ -26847,6 +26918,7 @@ static int test_wc_SetSubjectBuffer (void) } XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_SetSubjectBuffer*/ @@ -26938,6 +27010,7 @@ static int test_wc_SetSubjectKeyIdFromPublicKey_ex (void) #endif printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_FreeRng(&rng); #endif @@ -27030,6 +27103,7 @@ static int test_wc_SetAuthKeyIdFromPublicKey_ex (void) #endif printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); wc_FreeRng(&rng); #endif /*defined(WOLFSSL_CERT_EXT) && defined(WOLFSSL_CERT_GEN)*/ @@ -29365,6 +29439,7 @@ static int test_wc_SignatureGetSize_ecc(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif /* NO_SIG_WRAPPER */ return ret; }/* END test_wc_SignatureGetSize_ecc() */ @@ -29633,6 +29708,7 @@ static int test_wc_HashSetFlags(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -29735,6 +29811,7 @@ static int test_wc_HashGetFlags(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -32035,7 +32112,7 @@ static void test_wolfSSL_PEM_PUBKEY(void) file = XFOPEN(fname, "rb"); AssertTrue((file != XBADFILE)); - XFSEEK(file, 0, XSEEK_END); + AssertIntGE(XFSEEK(file, 0, XSEEK_END), 0); sz = XFTELL(file); XREWIND(file); AssertNotNull(buf = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE)); @@ -38068,6 +38145,7 @@ static int test_WOLFSSL_ERROR_MSG (void) WOLFSSL_ERROR_MSG(msg); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -38085,6 +38163,7 @@ static int test_wc_ERR_remove_state (void) wc_ERR_remove_state(); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -38120,6 +38199,7 @@ static int test_wc_ERR_print_errors_fp (void) #endif #endif printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); XFCLOSE(fp); (void)sz; #endif @@ -38175,6 +38255,7 @@ static int test_wolfSSL_GetLoggingCb (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); return ret; }/*End test_wolfSSL_GetLoggingCb*/ @@ -46157,6 +46238,7 @@ static void test_wolfSSL_X509_cmp(void) ret = wolfSSL_X509_cmp(cert1, cert1); AssertIntEQ(0, wolfSSL_X509_cmp(cert1, cert1)); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); printf(testingFmt, "wolfSSL_X509_cmp() testing mismatched certs"); ret = wolfSSL_X509_cmp(cert1, cert2); @@ -49533,6 +49615,7 @@ static int test_get_rand_digit (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; @@ -49559,6 +49642,7 @@ static int test_get_digit_count (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); mp_clear(&a); #endif return ret; @@ -49609,6 +49693,7 @@ static int test_mp_cond_copy (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); mp_clear(&a); mp_clear(&b); #endif @@ -49658,6 +49743,7 @@ static int test_mp_rand (void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); mp_clear(&a); wc_FreeRng(&rng); #endif @@ -49701,6 +49787,7 @@ static int test_get_digit (void) printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); mp_clear(&a); #endif return ret; @@ -49760,6 +49847,7 @@ static int test_wc_export_int(void) } printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); mp_clear(&mp); #endif return ret; @@ -49785,6 +49873,7 @@ static int test_wc_InitRngNonce(void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/* End test_wc_InitRngNonce*/ @@ -49810,6 +49899,7 @@ static int test_wc_InitRngNonce_ex(void) wc_FreeRng(&rng); printf(resultFmt, ret == 0 ? passed : failed); + fflush(stdout); #endif return ret; }/*End test_wc_InitRngNonce_ex*/ @@ -49889,6 +49979,7 @@ static void test_wolfSSL_X509_CRL(void) #endif printf(resultFmt, passed); + fflush(stdout); #endif return; } @@ -51987,7 +52078,7 @@ static void test_wolfSSL_RSA_verify(void) /* read privete key file */ fp = XFOPEN(svrKeyFile, "rb"); AssertTrue((fp != XBADFILE)); - XFSEEK(fp, 0, XSEEK_END); + AssertIntGE(XFSEEK(fp, 0, XSEEK_END), 0); sz = XFTELL(fp); XREWIND(fp); AssertNotNull(buf = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE)); @@ -55638,6 +55729,7 @@ static void test_wolfSSL_DtlsUpdateWindow(void) DUW_TEST(152, 0xFFFFFFFF, next_hi, next_lo, window, 153, 0, 0, 0x01); printf(resultFmt, passed); + fflush(stdout); } #endif /* WOLFSSL_DTLS */ @@ -55651,6 +55743,7 @@ void ApiTest(void) AssertTrue(test_fileAccess()); printf(" Begin API Tests\n"); + fflush(stdout); AssertIntEQ(test_wolfSSL_Init(), WOLFSSL_SUCCESS); /* wolfcrypt initialization tests */ test_wolfSSL_Method_Allocators(); @@ -56557,5 +56650,5 @@ void ApiTest(void) (void)devId; printf(" End API Tests\n"); - + fflush(stdout); } diff --git a/tests/suites.c b/tests/suites.c index b7f2c18a2..88a8cd116 100644 --- a/tests/suites.c +++ b/tests/suites.c @@ -494,7 +494,8 @@ static int execute_test_case(int svr_argc, char** svr_argv, if (cliArgs.argc + 2 > MAX_ARGS) printf("cannot add the magic port number flag to client\n"); else { - snprintf(portNumber, sizeof(portNumber), "%d", (int)ready.port); + (void)snprintf(portNumber, sizeof(portNumber), "%d", + (int)ready.port); cli_argv[cliArgs.argc++] = portFlag; cli_argv[cliArgs.argc++] = portNumber; } @@ -633,15 +634,20 @@ static void test_harness(void* vargs) args->return_code = 1; return; } - fseek(file, 0, SEEK_END); + if (fseek(file, 0, SEEK_END) < 0) { + fprintf(stderr, "error %d fseeking %s\n", errno, fname); + fclose(file); + args->return_code = 1; + return; + } sz = ftell(file); - rewind(file); if (sz <= 0) { fprintf(stderr, "%s is empty\n", fname); fclose(file); args->return_code = 1; return; } + rewind(file); script = (char*)malloc(sz+1); if (script == 0) { diff --git a/tests/unit.c b/tests/unit.c index 59bcd8b1e..42cc06392 100644 --- a/tests/unit.c +++ b/tests/unit.c @@ -54,12 +54,13 @@ int unit_test(int argc, char** argv) #ifdef WOLFSSL_FORCE_MALLOC_FAIL_TEST if (argc > 1) { int memFailCount = atoi(argv[1]); - printf("\n--- SET RNG MALLOC FAIL AT %d---\n", memFailCount); + fprintf(stderr, "\n--- SET RNG MALLOC FAIL AT %d---\n", memFailCount); wolfSSL_SetMemFailCount(memFailCount); } #endif printf("starting unit tests...\n"); + fflush(stdout); #if defined(DEBUG_WOLFSSL) && !defined(HAVE_VALGRIND) wolfSSL_Debugging_ON(); @@ -160,13 +161,13 @@ int unit_test(int argc, char** argv) ApiTest(); if ( (ret = HashTest()) != 0){ - printf("hash test failed with %d\n", ret); + fprintf(stderr, "hash test failed with %d\n", ret); goto exit; } #ifdef WOLFSSL_W64_WRAPPER if ((ret = w64wrapper_test()) != 0) { - printf("w64wrapper test failed with %d\n", ret); + fprintf(stderr, "w64wrapper test failed with %d\n", ret); goto exit; } #endif /* WOLFSSL_W64_WRAPPER */ @@ -177,7 +178,7 @@ int unit_test(int argc, char** argv) #if !defined(NO_WOLFSSL_CLIENT) && !defined(NO_WOLFSSL_SERVER) #ifndef SINGLE_THREADED if ( (ret = SuiteTest(argc, argv)) != 0){ - printf("suite test failed with %d\n", ret); + fprintf(stderr, "suite test failed with %d\n", ret); goto exit; } #endif @@ -192,6 +193,11 @@ exit: err_sys("Failed to free netRandom context"); #endif /* HAVE_WNR */ + if (ret == 0) { + puts("\nunit_test: Success for all configured tests."); + fflush(stdout); + } + return ret; } @@ -202,13 +208,14 @@ void wait_tcp_ready(func_args* args) #ifdef SINGLE_THREADED (void)args; #elif defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_mutex_lock(&args->signal->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&args->signal->mutex)); if (!args->signal->ready) - pthread_cond_wait(&args->signal->cond, &args->signal->mutex); + PTHREAD_CHECK_RET(pthread_cond_wait(&args->signal->cond, + &args->signal->mutex)); args->signal->ready = 0; /* reset */ - pthread_mutex_unlock(&args->signal->mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&args->signal->mutex)); #else (void)args; #endif @@ -222,7 +229,7 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread) (void)args; (void)thread; #elif defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_create(thread, 0, fun, args); + PTHREAD_CHECK_RET(pthread_create(thread, 0, fun, args)); return; #elif defined (WOLFSSL_TIRTOS) /* Initialize the defaults and set the parameters. */ @@ -232,7 +239,7 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread) taskParams.stackSize = 65535; *thread = Task_create((Task_FuncPtr)fun, &taskParams, NULL); if (*thread == NULL) { - printf("Failed to create new Task\n"); + fprintf(stderr, "Failed to create new Task\n"); } Task_yield(); #else @@ -246,7 +253,7 @@ void join_thread(THREAD_TYPE thread) #ifdef SINGLE_THREADED (void)thread; #elif defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_join(thread, 0); + PTHREAD_CHECK_RET(pthread_join(thread, 0)); #elif defined (WOLFSSL_TIRTOS) while(1) { if (Task_getMode(thread) == Task_Mode_TERMINATED) { diff --git a/tests/unit.h b/tests/unit.h index afb3225ae..9b0931340 100644 --- a/tests/unit.h +++ b/tests/unit.h @@ -35,15 +35,17 @@ #ifndef WOLFSSL_PASSTHRU_ERR #define Fail(description, result) do { \ printf("\nERROR - %s line %d failed with:", __FILE__, __LINE__); \ - printf("\n expected: "); printf description; \ - printf("\n result: "); printf result; printf("\n\n"); \ + fputs("\n expected: ", stdout); printf description; \ + fputs("\n result: ", stdout); printf result; fputs("\n\n", stdout); \ + fflush(stdout); \ XABORT(); \ } while(0) #else -#define Fail(description, result) do { \ - printf("\nERROR - %s line %d failed with:", __FILE__, __LINE__); \ - printf("\n expected: ");printf description; \ - printf("\n result: "); printf result; printf("\n\n"); \ +#define Fail(description, result) do { \ + printf("\nERROR - %s line %d failed with:", __FILE__, __LINE__); \ + fputs("\n expected: ", stdout); printf description; \ + fputs("\n result: ", stdout); printf result; fputs("\n\n", stdout); \ + fflush(stdout); \ } while (0) #endif @@ -90,9 +92,17 @@ #define AssertStrLE(x, y) AssertStr(x, y, <=, >) #define AssertPtr(x, y, op, er) do { \ + PRAGMA_GCC_DIAG_PUSH; \ + /* remarkably, without this inhibition, */ \ + /* the _Pragma()s make the declarations warn. */ \ + PRAGMA_GCC("GCC diagnostic ignored \"-Wdeclaration-after-statement\""); \ + /* inhibit "ISO C forbids conversion of function pointer */ \ + /* to object pointer type [-Werror=pedantic]" */ \ + PRAGMA_GCC("GCC diagnostic ignored \"-Wpedantic\""); \ void* _x = (void*)(x); \ void* _y = (void*)(y); \ Assert(_x op _y, ("%s " #op " %s", #x, #y), ("%p " #er " %p", _x, _y)); \ + PRAGMA_GCC_DIAG_POP; \ } while(0) #define AssertPtrEq(x, y) AssertPtr(x, y, ==, !=) diff --git a/testsuite/testsuite.c b/testsuite/testsuite.c index d99c0694e..c6c4aa516 100644 --- a/testsuite/testsuite.c +++ b/testsuite/testsuite.c @@ -402,7 +402,7 @@ static void simple_test(func_args* args) #ifndef USE_WINDOWS_API cliArgs.argc = NUMARGS; XSTRLCPY(argvc[1], "-p", sizeof(argvc[1])); - snprintf(argvc[2], sizeof(argvc[2]), "%d", (int)svrArgs.signal->port); + (void)snprintf(argvc[2], sizeof(argvc[2]), "%d", (int)svrArgs.signal->port); #else cliArgs.argc = 1; #endif @@ -432,13 +432,14 @@ static void simple_test(func_args* args) void wait_tcp_ready(func_args* args) { #if defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_mutex_lock(&args->signal->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&args->signal->mutex)); if (!args->signal->ready) - pthread_cond_wait(&args->signal->cond, &args->signal->mutex); + PTHREAD_CHECK_RET(pthread_cond_wait(&args->signal->cond, + &args->signal->mutex)); args->signal->ready = 0; /* reset */ - pthread_mutex_unlock(&args->signal->mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&args->signal->mutex)); #elif defined(NETOS) (void)tx_mutex_get(&args->signal->mutex, TX_WAIT_FOREVER); @@ -464,7 +465,7 @@ void wait_tcp_ready(func_args* args) void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread) { #if defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_create(thread, 0, fun, args); + PTHREAD_CHECK_RET(pthread_create(thread, 0, fun, args)); return; #elif defined(WOLFSSL_TIRTOS) /* Initialize the defaults and set the parameters. */ @@ -533,7 +534,7 @@ void start_thread(THREAD_FUNC fun, func_args* args, THREAD_TYPE* thread) void join_thread(THREAD_TYPE thread) { #if defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_join(thread, 0); + PTHREAD_CHECK_RET(pthread_join(thread, 0)); #elif defined(WOLFSSL_TIRTOS) while(1) { if (Task_getMode(thread) == Task_Mode_TERMINATED) { diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 837b0f37c..3d2525d38 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -38,6 +38,7 @@ #ifdef HAVE_PTHREAD #include + #include #endif /* Macro to disable benchmark */ @@ -314,6 +315,31 @@ #define EXIT_FAILURE 1 #endif +#undef LIBCALL_CHECK_RET +#if defined(NO_STDIO_FILESYSTEM) || defined(NO_ERROR_STRINGS) +#define LIBCALL_CHECK_RET(...) __VA_ARGS__ +#else +#define LIBCALL_CHECK_RET(...) do { \ + int _libcall_ret = (__VA_ARGS__); \ + if (_libcall_ret < 0) { \ + fprintf(stderr, "%s L%d error %d for \"%s\"\n", \ + __FILE__, __LINE__, errno, #__VA_ARGS__); \ + _exit(1); \ + } \ + } while(0) +#endif + +#undef PTHREAD_CHECK_RET +#define PTHREAD_CHECK_RET(...) do { \ + int _pthread_ret = (__VA_ARGS__); \ + if (_pthread_ret != 0) { \ + errno = _pthread_ret; \ + fprintf(stderr, "%s L%d error %d for \"%s\"\n", \ + __FILE__, __LINE__, _pthread_ret, #__VA_ARGS__); \ + _exit(1); \ + } \ + } while(0) + /* optional macro to add sleep between tests */ #ifndef TEST_SLEEP /* stub the sleep macro */ @@ -854,11 +880,11 @@ static const char* bench_desc_words[][14] = { #define END_INTEL_CYCLES total_cycles = get_intel_cycles() - total_cycles; /* s == size in bytes that 1 count represents, normally BENCH_SIZE */ #define SHOW_INTEL_CYCLES(b, n, s) \ - XSNPRINTF((b) + XSTRLEN(b), (n) - XSTRLEN(b), " %s = %6.2f\n", \ + (void)XSNPRINTF((b) + XSTRLEN(b), (n) - XSTRLEN(b), " %s = %6.2f\n", \ bench_result_words1[lng_index][2], \ count == 0 ? 0 : (float)total_cycles / ((word64)count*(s))) #define SHOW_INTEL_CYCLES_CSV(b, n, s) \ - XSNPRINTF((b) + XSTRLEN(b), (n) - XSTRLEN(b), "%.2f,\n", \ + (void)XSNPRINTF((b) + XSTRLEN(b), (n) - XSTRLEN(b), "%.2f,\n", \ count == 0 ? 0 : (float)total_cycles / ((word64)count*(s))) #elif defined(LINUX_CYCLE_COUNT) #include @@ -884,11 +910,11 @@ static const char* bench_desc_words[][14] = { /* s == size in bytes that 1 count represents, normally BENCH_SIZE */ #define SHOW_INTEL_CYCLES(b, n, s) \ - XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), " %s = %6.2f\n", \ + (void)XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), " %s = %6.2f\n", \ bench_result_words1[lng_index][2], \ (float)total_cycles / (count*s)) #define SHOW_INTEL_CYCLES_CSV(b, n, s) \ - XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), "%.2f,\n", \ + (void)XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), "%.2f,\n", \ (float)total_cycles / (count*s)) #elif defined(SYNERGY_CYCLE_COUNT) @@ -902,11 +928,11 @@ static const char* bench_desc_words[][14] = { /* s == size in bytes that 1 count represents, normally BENCH_SIZE */ #define SHOW_INTEL_CYCLES(b, n, s) \ - XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), " %s = %6.2f\n", \ + (void)XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), " %s = %6.2f\n", \ bench_result_words1[lng_index][2], \ (float)total_cycles / (count*s)) #define SHOW_INTEL_CYCLES_CSV(b, n, s) \ - XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), "%.2f,\n", \ + (void)XSNPRINTF(b + XSTRLEN(b), n - XSTRLEN(b), "%.2f,\n", \ (float)total_cycles / (count*s)) #else @@ -1305,7 +1331,7 @@ typedef enum bench_stat_type { bench_stats_t* bstat = NULL; /* protect bench_stats_head and bench_stats_tail access */ - pthread_mutex_lock(&bench_lock); + PTHREAD_CHECK_RET(pthread_mutex_lock(&bench_lock)); if (algo != NULL) { /* locate existing in list */ @@ -1352,7 +1378,7 @@ typedef enum bench_stat_type { if (bstat->lastRet > ret) bstat->lastRet = ret; /* track last error */ } - pthread_mutex_unlock(&bench_lock); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&bench_lock)); return bstat; } @@ -1362,7 +1388,7 @@ typedef enum bench_stat_type { bench_stats_t* bstat; /* protect bench_stats_head and bench_stats_tail access */ - pthread_mutex_lock(&bench_lock); + PTHREAD_CHECK_RET(pthread_mutex_lock(&bench_lock)); for (bstat = bench_stats_head; bstat != NULL; ) { if (bstat->type == BENCH_STAT_SYM) { @@ -1379,7 +1405,7 @@ typedef enum bench_stat_type { bstat = bstat->next; } - pthread_mutex_unlock(&bench_lock); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&bench_lock)); } #else /* !WC_ENABLE_BENCH_THREADING */ @@ -1513,12 +1539,12 @@ static void bench_stats_sym_finish(const char* desc, int useDeviceID, int count, /* format and print to terminal */ if (csv_format == 1) { - XSNPRINTF(msg, sizeof(msg), "%s,%.3f,", desc, persec); + (void)XSNPRINTF(msg, sizeof(msg), "%s,%.3f,", desc, persec); SHOW_INTEL_CYCLES_CSV(msg, sizeof(msg), countSz); } else { - XSNPRINTF(msg, sizeof(msg), "%-16s%s %5.0f %s %s %5.3f %s, %8.3f %s/s", - desc, BENCH_ASYNC_GET_NAME(useDeviceID), blocks, blockType, word[0], - total, word[1], persec, blockType); + (void)XSNPRINTF(msg, sizeof(msg), "%-16s%s %5.0f %s %s %5.3f %s, %8.3f %s/s", + desc, BENCH_ASYNC_GET_NAME(useDeviceID), blocks, blockType, word[0], + total, word[1], persec, blockType); SHOW_INTEL_CYCLES(msg, sizeof(msg), countSz); } printf("%s", msg); @@ -1564,9 +1590,9 @@ static void bench_stats_asym_finish(const char* algo, int strength, printf("Algorithm,avg ms,ops/sec,\n"); csv_header_count++; } - XSNPRINTF(msg, sizeof(msg), "%s %d %s,%.3f,%.3f,\n", algo, strength, desc, milliEach, opsSec); + (void)XSNPRINTF(msg, sizeof(msg), "%s %d %s,%.3f,%.3f,\n", algo, strength, desc, milliEach, opsSec); } else { - XSNPRINTF(msg, sizeof(msg), "%-6s %5d %-9s %s %6d %s %5.3f %s, %s %5.3f ms," + (void)XSNPRINTF(msg, sizeof(msg), "%-6s %5d %-9s %s %6d %s %5.3f %s, %s %5.3f ms," " %.3f %s\n", algo, strength, desc, BENCH_ASYNC_GET_NAME(useDeviceID), count, word[0], total, word[1], word[2], milliEach, opsSec, word[3]); } @@ -1610,9 +1636,9 @@ static void bench_stats_pq_asym_finish(const char* algo, int useDeviceID, int co printf("Algorithm,avg ms,ops/sec,\n"); csv_header_count++; } - XSNPRINTF(msg, sizeof(msg), "%s %.3f,%.3f,\n", algo, milliEach, opsSec); + (void)XSNPRINTF(msg, sizeof(msg), "%s %.3f,%.3f,\n", algo, milliEach, opsSec); } else { - XSNPRINTF(msg, sizeof(msg), "%-18s %s %6d %s %5.3f %s, %s %5.3f ms," + (void)XSNPRINTF(msg, sizeof(msg), "%-18s %s %6d %s %5.3f %s, %s %5.3f ms," " %.3f %s\n", algo, BENCH_ASYNC_GET_NAME(useDeviceID), count, word[0], total, word[1], word[2], milliEach, opsSec, word[3]); } @@ -2490,11 +2516,11 @@ static int benchmark_test_threaded(void* args) } for (i = 0; i < g_threadCount; i++) { - pthread_create(&g_threadData[i].thread_id, NULL, run_bench, args); + PTHREAD_CHECK_RET(pthread_create(&g_threadData[i].thread_id, NULL, run_bench, args)); } for (i = 0; i < g_threadCount; i++) { - pthread_join(g_threadData[i].thread_id, 0); + PTHREAD_CHECK_RET(pthread_join(g_threadData[i].thread_id, 0)); } printf("\n"); @@ -5890,7 +5916,7 @@ void bench_eccMakeKey(int useDeviceID, int curveId) count += times; } while (bench_stats_sym_check(start)); exit: - XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECC [%15s]", + (void)XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECC [%15s]", wc_ecc_get_name(curveId)); bench_stats_asym_finish(name, keySize * 8, desc[2], useDeviceID, count, start, ret); @@ -6010,7 +6036,7 @@ void bench_ecc(int useDeviceID, int curveId) } while (bench_stats_sym_check(start)); PRIVATE_KEY_UNLOCK(); exit_ecdhe: - XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECDHE [%15s]", wc_ecc_get_name(curveId)); + (void)XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECDHE [%15s]", wc_ecc_get_name(curveId)); bench_stats_asym_finish(name, keySize * 8, desc[3], useDeviceID, count, start, ret); @@ -6054,7 +6080,7 @@ exit_ecdhe: count += times; } while (bench_stats_sym_check(start)); exit_ecdsa_sign: - XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECDSA [%15s]", wc_ecc_get_name(curveId)); + (void)XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECDSA [%15s]", wc_ecc_get_name(curveId)); bench_stats_asym_finish(name, keySize * 8, desc[4], useDeviceID, count, start, ret); @@ -6090,7 +6116,7 @@ exit_ecdsa_sign: count += times; } while (bench_stats_sym_check(start)); exit_ecdsa_verify: - XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECDSA [%15s]", wc_ecc_get_name(curveId)); + (void)XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECDSA [%15s]", wc_ecc_get_name(curveId)); bench_stats_asym_finish(name, keySize * 8, desc[5], useDeviceID, count, start, ret); @@ -6197,7 +6223,7 @@ void bench_eccEncrypt(int curveId) count += i; } while (bench_stats_sym_check(start)); exit_enc: - XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECC [%15s]", wc_ecc_get_name(curveId)); + (void)XSNPRINTF(name, BENCH_ECC_NAME_SZ, "ECC [%15s]", wc_ecc_get_name(curveId)); bench_stats_asym_finish(name, keySize * 8, desc[6], 0, count, start, ret); bench_stats_start(&count, &start); @@ -7477,7 +7503,7 @@ void bench_falconKeySign(byte level) (void)reset; - gettimeofday(&tv, 0); + LIBCALL_CHECK_RET(gettimeofday(&tv, 0)); return (double)tv.tv_sec + (double)tv.tv_usec / 1000000; } diff --git a/wolfcrypt/src/asn.c b/wolfcrypt/src/asn.c index 4bfd2562f..1f3380b73 100644 --- a/wolfcrypt/src/asn.c +++ b/wolfcrypt/src/asn.c @@ -11108,16 +11108,26 @@ static int GenerateDNSEntryIPString(DNS_entry* entry, void* heap) /* store IP addresses as a string */ if (entry->len == WOLFSSL_IP4_ADDR_LEN) { - XSNPRINTF(tmpName, sizeof(tmpName), "%u.%u.%u.%u", 0xFFU & ip[0], - 0xFFU & ip[1], 0xFFU & ip[2], 0xFFU & ip[3]); + if (XSNPRINTF(tmpName, sizeof(tmpName), "%u.%u.%u.%u", 0xFFU & ip[0], + 0xFFU & ip[1], 0xFFU & ip[2], 0xFFU & ip[3]) + >= (int)sizeof(tmpName)) + { + WOLFSSL_MSG("IP buffer overrun"); + return BUFFER_E; + } } if (entry->len == WOLFSSL_IP6_ADDR_LEN) { int i; for (i = 0; i < 8; i++) { - XSNPRINTF(tmpName + i * 5, sizeof(tmpName) - i * 5, + if (XSNPRINTF(tmpName + i * 5, sizeof(tmpName) - i * 5, "%02X%02X%s", 0xFF & ip[2 * i], 0xFF & ip[2 * i + 1], - (i < 7) ? ":" : ""); + (i < 7) ? ":" : "") + >= (int)sizeof(tmpName)) + { + WOLFSSL_MSG("IPv6 buffer overrun"); + return BUFFER_E; + } } } @@ -12424,8 +12434,13 @@ int GetTimeString(byte* date, int format, char* buf, int len) } idx = 4; /* use idx now for char buffer */ - XSNPRINTF(buf + idx, len - idx, "%2d %02d:%02d:%02d %d GMT", - t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, (int)t.tm_year + 1900); + if (XSNPRINTF(buf + idx, len - idx, "%2d %02d:%02d:%02d %d GMT", + t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, (int)t.tm_year + 1900) + >= len - idx) + { + WOLFSSL_MSG("buffer overrun in GetTimeString"); + return 0; + } return 1; } diff --git a/wolfcrypt/src/error.c b/wolfcrypt/src/error.c index b083bf717..b401d2e29 100644 --- a/wolfcrypt/src/error.c +++ b/wolfcrypt/src/error.c @@ -567,6 +567,12 @@ const char* wc_GetErrorString(int error) case NO_VALID_DEVID: return "No valid device ID set"; + case IO_FAILED_E: + return "Input/output failure"; + + case SYSLIB_FAILED_E: + return "System/library call failed"; + default: return "unknown error number"; diff --git a/wolfcrypt/src/logging.c b/wolfcrypt/src/logging.c index 7a6f58b1a..3f6c337d5 100644 --- a/wolfcrypt/src/logging.c +++ b/wolfcrypt/src/logging.c @@ -502,7 +502,7 @@ void WOLFSSL_ERROR(int error) if (wc_LockMutex(&debug_mutex) != 0) { WOLFSSL_MSG("Lock debug mutex failed"); - XSNPRINTF(buffer, sizeof(buffer), + (void)XSNPRINTF(buffer, sizeof(buffer), "wolfSSL error occurred, error = %d", error); } else { @@ -513,7 +513,7 @@ void WOLFSSL_ERROR(int error) #endif if (error < 0) error = error - (2 * error); /* get absolute value */ - XSNPRINTF(buffer, sizeof(buffer), + (void)XSNPRINTF(buffer, sizeof(buffer), "wolfSSL error occurred, error = %d line:%u file:%s", error, line, file); @@ -525,7 +525,7 @@ void WOLFSSL_ERROR(int error) #if defined(OPENSSL_EXTRA) && !defined(WOLFCRYPT_ONLY) } else { - XSNPRINTF(buffer, sizeof(buffer), + (void)XSNPRINTF(buffer, sizeof(buffer), "wolfSSL error occurred, error = %d", error); } #endif @@ -533,7 +533,7 @@ void WOLFSSL_ERROR(int error) wc_UnLockMutex(&debug_mutex); } #else - XSNPRINTF(buffer, sizeof(buffer), + (void)XSNPRINTF(buffer, sizeof(buffer), "wolfSSL error occurred, error = %d", error); #endif @@ -929,7 +929,8 @@ int wc_ERR_remove_state(void) static int wc_ERR_dump_to_file (const char *str, size_t len, void *u) { XFILE fp = (XFILE ) u; - fprintf(fp, "%-*.*s\n", (int)len, (int)len, str); + if (fprintf(fp, "%-*.*s\n", (int)len, (int)len, str) < 0) + return IO_FAILED_E; return 0; } diff --git a/wolfcrypt/src/sp_int.c b/wolfcrypt/src/sp_int.c index 8fb3ca04a..271647c3c 100644 --- a/wolfcrypt/src/sp_int.c +++ b/wolfcrypt/src/sp_int.c @@ -6605,11 +6605,11 @@ int sp_addmod_ct(sp_int* a, sp_int* b, sp_int* m, sp_int* r) } if (err == MP_OKAY) { - if (0) { - sp_print(a, "a"); - sp_print(b, "b"); - sp_print(m, "m"); - } +#if 0 + sp_print(a, "a"); + sp_print(b, "b"); + sp_print(m, "m"); +#endif /* Add a to b into r. Do the subtract of modulus but don't store result. * When subtract result is negative, the overflow will be negative. @@ -6694,9 +6694,9 @@ int sp_addmod_ct(sp_int* a, sp_int* b, sp_int* m, sp_int* r) #endif /* WOLFSSL_SP_INT_NEGATIVE */ sp_clamp(r); - if (0) { - sp_print(r, "rma"); - } +#if 0 + sp_print(r, "rma"); +#endif } return err; @@ -6740,11 +6740,11 @@ int sp_submod_ct(sp_int* a, sp_int* b, sp_int* m, sp_int* r) } if (err == MP_OKAY) { - if (0) { - sp_print(a, "a"); - sp_print(b, "b"); - sp_print(m, "m"); - } +#if 0 + sp_print(a, "a"); + sp_print(b, "b"); + sp_print(m, "m"); +#endif /* In constant time, subtract b from a putting result in r. */ #ifndef SQR_MUL_ASM @@ -6809,9 +6809,9 @@ int sp_submod_ct(sp_int* a, sp_int* b, sp_int* m, sp_int* r) #endif /* WOLFSSL_SP_INT_NEGATIVE */ sp_clamp(r); - if (0) { - sp_print(r, "rms"); - } +#if 0 + sp_print(r, "rms"); +#endif } return err; @@ -11117,11 +11117,11 @@ static int _sp_exptmod_base_2(sp_int* e, int digits, sp_int* m, sp_int* r) sp_int_digit mp = 0, n = 0; DECL_SP_INT_ARRAY(d, m->used * 2 + 1, 2); - if (0) { - sp_print_int(2, "a"); - sp_print(e, "b"); - sp_print(m, "m"); - } +#if 0 + sp_print_int(2, "a"); + sp_print(e, "b"); + sp_print(m, "m"); +#endif ALLOC_SP_INT_ARRAY(d, m->used * 2 + 1, 2, err, NULL); if (err == MP_OKAY) { @@ -11240,9 +11240,9 @@ static int _sp_exptmod_base_2(sp_int* e, int digits, sp_int* m, sp_int* r) err = sp_copy(tr, r); } - if (0) { - sp_print(r, "rme"); - } +#if 0 + sp_print(r, "rme"); +#endif FREE_SP_INT_ARRAY(d, NULL); return err; @@ -11995,14 +11995,14 @@ int sp_mul_2d(sp_int* a, int e, sp_int* r) } if (err == MP_OKAY) { - if (0) { - sp_print(a, "a"); - sp_print_int(e, "n"); - } +#if 0 + sp_print(a, "a"); + sp_print_int(e, "n"); +#endif err = sp_lshb(r, e); - if (0) { - sp_print(r, "rsl"); - } +#if 0 + sp_print(r, "rsl"); +#endif } return err; @@ -14495,10 +14495,10 @@ static int _sp_mont_red(sp_int* a, sp_int* m, sp_int_digit mp) sp_int_word w; sp_int_digit mu; - if (0) { - sp_print(a, "a"); - sp_print(m, "m"); - } +#if 0 + sp_print(a, "a"); + sp_print(m, "m"); +#endif bits = sp_count_bits(m); @@ -14563,9 +14563,9 @@ static int _sp_mont_red(sp_int* a, sp_int* m, sp_int_digit mp) _sp_sub_off(a, m, a, 0); } - if (0) { - sp_print(a, "rr"); - } +#if 0 + sp_print(a, "rr"); +#endif return MP_OKAY; #else /* !SQR_MUL_ASM */ diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 1be78de15..0b9163951 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -854,7 +854,8 @@ void wc_ReadDirClose(ReadDirCtx* ctx) } #else if (ctx->dir) { - closedir(ctx->dir); + if (closedir(ctx->dir) < 0) + WOLFSSL_MSG("closedir() failed"); ctx->dir = NULL; } #endif diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index a3c174541..060fb3a8b 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -203,6 +203,8 @@ #ifdef XPRINTF #undef printf #define printf XPRINTF + #elif !defined(printf) + #define printf(...) ( printf(__VA_ARGS__), fflush(stdout) ) #endif #endif @@ -35028,7 +35030,7 @@ static int pkcs7signed_run_vectors( #if defined(WOLF_C89) XSPRINTF((char*)&transId[k], "%02x", digest[j]); #else - XSNPRINTF((char*)&transId[k], 3, "%02x", digest[j]); + (void)XSNPRINTF((char*)&transId[k], 3, "%02x", digest[j]); #endif } } diff --git a/wolfssl/test.h b/wolfssl/test.h index c0abc7304..282ca8848 100644 --- a/wolfssl/test.h +++ b/wolfssl/test.h @@ -174,7 +174,8 @@ #define XSELECT_WAIT(x,y) do { \ struct timeval tv = {((x) + ((y) / 1000000)),((y) % 1000000)}; \ - select(0, NULL, NULL, NULL, &tv); \ + if ((select(0, NULL, NULL, NULL, &tv) < 0) && (errno != EINTR)) \ + err_sys("select for XSELECT_WAIT failed."); \ } while (0) #define XSLEEP_US(u) XSELECT_WAIT(0,u) #define XSLEEP_MS(m) XSELECT_WAIT(0,(m)*1000) @@ -471,6 +472,32 @@ typedef struct tcp_ready { #endif } tcp_ready; +static WC_INLINE +#if defined(WOLFSSL_FORCE_MALLOC_FAIL_TEST) || defined(WOLFSSL_ZEPHYR) +THREAD_RETURN +#else +WC_NORETURN void +#endif + err_sys(const char* msg); + +#define LIBCALL_CHECK_RET(...) do { \ + int _libcall_ret = (__VA_ARGS__); \ + if (_libcall_ret < 0) { \ + fprintf(stderr, "%s L%d error %d for \"%s\"\n", \ + __FILE__, __LINE__, errno, #__VA_ARGS__); \ + err_sys("library/system call failed"); \ + } \ + } while(0) + +#define PTHREAD_CHECK_RET(...) do { \ + int _pthread_ret = (__VA_ARGS__); \ + if (_pthread_ret != 0) { \ + errno = _pthread_ret; \ + fprintf(stderr, "%s L%d error %d for \"%s\"\n", \ + __FILE__, __LINE__, _pthread_ret, #__VA_ARGS__); \ + err_sys("pthread call failed"); \ + } \ + } while(0) static WC_INLINE void InitTcpReady(tcp_ready* ready) { @@ -479,8 +506,8 @@ static WC_INLINE void InitTcpReady(tcp_ready* ready) ready->srfName = NULL; #ifdef SINGLE_THREADED #elif defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_mutex_init(&ready->mutex, 0); - pthread_cond_init(&ready->cond, 0); + PTHREAD_CHECK_RET(pthread_mutex_init(&ready->mutex, 0)); + PTHREAD_CHECK_RET(pthread_cond_init(&ready->cond, 0)); #elif defined(NETOS) tx_mutex_create(&ready->mutex, "wolfSSL Lock", TX_INHERIT); #endif @@ -495,8 +522,8 @@ static WC_INLINE void FreeTcpReady(tcp_ready* ready) #ifdef SINGLE_THREADED (void)ready; #elif defined(_POSIX_THREADS) && !defined(__MINGW32__) - pthread_mutex_destroy(&ready->mutex); - pthread_cond_destroy(&ready->cond); + PTHREAD_CHECK_RET(pthread_mutex_destroy(&ready->mutex)); + PTHREAD_CHECK_RET(pthread_cond_destroy(&ready->cond)); #elif defined(NETOS) tx_mutex_delete(&ready->mutex); #else @@ -658,8 +685,8 @@ static WC_INLINE void srtp_helper_init(srtp_test_helper *srtp) srtp->server_srtp_ekm_size = 0; srtp->server_srtp_ekm = NULL; - pthread_mutex_init(&srtp->mutex, 0); - pthread_cond_init(&srtp->cond, 0); + PTHREAD_CHECK_RET(pthread_mutex_init(&srtp->mutex, 0)); + PTHREAD_CHECK_RET(pthread_cond_init(&srtp->cond, 0)); } /** @@ -674,10 +701,10 @@ static WC_INLINE void srtp_helper_init(srtp_test_helper *srtp) static WC_INLINE void srtp_helper_get_ekm(srtp_test_helper *srtp, uint8_t **ekm, size_t *size) { - pthread_mutex_lock(&srtp->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&srtp->mutex)); if (srtp->server_srtp_ekm == NULL) - pthread_cond_wait(&srtp->cond, &srtp->mutex); + PTHREAD_CHECK_RET(pthread_cond_wait(&srtp->cond, &srtp->mutex)); *ekm = srtp->server_srtp_ekm; *size = srtp->server_srtp_ekm_size; @@ -686,7 +713,7 @@ static WC_INLINE void srtp_helper_get_ekm(srtp_test_helper *srtp, srtp->server_srtp_ekm = NULL; srtp->server_srtp_ekm_size = 0; - pthread_mutex_unlock(&srtp->mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&srtp->mutex)); } /** @@ -703,19 +730,19 @@ static WC_INLINE void srtp_helper_get_ekm(srtp_test_helper *srtp, static WC_INLINE void srtp_helper_set_ekm(srtp_test_helper *srtp, uint8_t *ekm, size_t size) { - pthread_mutex_lock(&srtp->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&srtp->mutex)); srtp->server_srtp_ekm_size = size; srtp->server_srtp_ekm = ekm; - pthread_cond_signal(&srtp->cond); + PTHREAD_CHECK_RET(pthread_cond_signal(&srtp->cond)); - pthread_mutex_unlock(&srtp->mutex); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&srtp->mutex)); } static WC_INLINE void srtp_helper_free(srtp_test_helper *srtp) { - pthread_mutex_destroy(&srtp->mutex); - pthread_cond_destroy(&srtp->cond); + PTHREAD_CHECK_RET(pthread_mutex_destroy(&srtp->mutex)); + PTHREAD_CHECK_RET(pthread_cond_destroy(&srtp->cond)); } #endif /* WOLFSSL_SRTP && !SINGLE_THREADED && POSIX_THREADS */ @@ -1345,7 +1372,7 @@ static WC_INLINE void build_addr(SOCKADDR_IN_T* addr, const char* peer, hints.ai_protocol = IPPROTO_TCP; } - SNPRINTF(strPort, sizeof(strPort), "%d", port); + (void)SNPRINTF(strPort, sizeof(strPort), "%d", port); strPort[79] = '\0'; ret = getaddrinfo(peer, strPort, &hints, &answer); @@ -2080,11 +2107,11 @@ static WC_INLINE void udp_accept(SOCKET_T* sockfd, SOCKET_T* clientfd, /* signal ready to accept data */ { tcp_ready* ready = args->signal; - pthread_mutex_lock(&ready->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&ready->mutex)); ready->ready = 1; ready->port = port; - pthread_cond_signal(&ready->cond); - pthread_mutex_unlock(&ready->mutex); + PTHREAD_CHECK_RET(pthread_cond_signal(&ready->cond)); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&ready->mutex)); } #elif defined (WOLFSSL_TIRTOS) /* Need mutex? */ @@ -2128,11 +2155,11 @@ static WC_INLINE void tcp_accept(SOCKET_T* sockfd, SOCKET_T* clientfd, if (args) ready = args->signal; if (ready) { - pthread_mutex_lock(&ready->mutex); + PTHREAD_CHECK_RET(pthread_mutex_lock(&ready->mutex)); ready->ready = 1; ready->port = port; - pthread_cond_signal(&ready->cond); - pthread_mutex_unlock(&ready->mutex); + PTHREAD_CHECK_RET(pthread_cond_signal(&ready->cond)); + PTHREAD_CHECK_RET(pthread_mutex_unlock(&ready->mutex)); } #elif defined (WOLFSSL_TIRTOS) /* Need mutex? */ @@ -2170,7 +2197,7 @@ static WC_INLINE void tcp_accept(SOCKET_T* sockfd, SOCKET_T* clientfd, -p 0 to server on supported platforms with -R ready_file client can then wait for existence of ready_file and see which port the server is listening on. */ - fprintf(srf, "%d\n", (int)port); + LIBCALL_CHECK_RET(fprintf(srf, "%d\n", (int)port)); fclose(srf); } } @@ -2490,7 +2517,8 @@ static WC_INLINE unsigned int my_psk_client_cs_cb(WOLFSSL* ssl, static WC_INLINE double current_time(int reset) { struct timeval tv; - gettimeofday(&tv, NULL); + if (gettimeofday(&tv, NULL) < 0) + err_sys_with_errno("gettimeofday"); (void)reset; return (double)tv.tv_sec + (double)tv.tv_usec / 1000000; @@ -2562,7 +2590,7 @@ static WC_INLINE void OCSPRespFreeCb(void* ioCtx, unsigned char* response) return BAD_PATH_ERROR; } - fseek(lFile, 0, SEEK_END); + LIBCALL_CHECK_RET(fseek(lFile, 0, SEEK_END)); fileSz = (int)ftell(lFile); rewind(lFile); if (fileSz > 0) { diff --git a/wolfssl/wolfcrypt/error-crypt.h b/wolfssl/wolfcrypt/error-crypt.h index 25a95ea51..201bbf13f 100644 --- a/wolfssl/wolfcrypt/error-crypt.h +++ b/wolfssl/wolfcrypt/error-crypt.h @@ -250,7 +250,10 @@ enum { AES_SIV_AUTH_E = -289, /* AES-SIV authentication failed */ NO_VALID_DEVID = -290, /* no valid device ID */ - WC_LAST_E = -290, /* Update this to indicate last error */ + IO_FAILED_E = -291, /* Input/output failure */ + SYSLIB_FAILED_E = -292, /* System/library call failed */ + + WC_LAST_E = -292, /* Update this to indicate last error */ MIN_CODE_E = -300 /* errors -101 - -299 */ /* add new companion error id strings for any new error codes